#define RAZER_MAX_ZONES 6

#include <string>
#include "RGBController.h"
#include "RGBControllerKeyNames.h"

/*-----------------------------------------------------*\
| Razer vendor ID                                       |
\*-----------------------------------------------------*/
#define RAZER_VID                                       0x1532

/*-----------------------------------------------------*\
| Keyboard product IDs                                  |
|   List taken from OpenRazer                           |
|   Non-RGB keyboards were omitted from this list       |
\*-----------------------------------------------------*/
#define RAZER_BLACKWIDOW_2019_PID                       0x0241
#define RAZER_BLACKWIDOW_CHROMA_PID                     0x0203
#define RAZER_BLACKWIDOW_CHROMA_TE_PID                  0x0209
#define RAZER_BLACKWIDOW_CHROMA_V2_PID                  0x0221
#define RAZER_BLACKWIDOW_ELITE_PID                      0x0228
#define RAZER_BLACKWIDOW_ESSENTIAL_PID                  0x0237
#define RAZER_BLACKWIDOW_LITE_PID                       0x0235
#define RAZER_BLACKWIDOW_OVERWATCH_PID                  0x0211
#define RAZER_BLACKWIDOW_V3_PID                         0x024E
#define RAZER_BLACKWIDOW_V3_MINI_WIRED_PID              0x0258
#define RAZER_BLACKWIDOW_V3_MINI_WIRELESS_PID           0x0271
#define RAZER_BLACKWIDOW_V3_PRO_WIRED_PID               0x025A
#define RAZER_BLACKWIDOW_V3_PRO_BLUETOOTH_PID           0x025B
#define RAZER_BLACKWIDOW_V3_PRO_WIRELESS_PID            0x025C
#define RAZER_BLACKWIDOW_V3_TKL_PID                     0x0A24
#define RAZER_BLACKWIDOW_X_CHROMA_PID                   0x0216
#define RAZER_BLACKWIDOW_X_CHROMA_TE_PID                0x021A
#define RAZER_BLADE_2016_PID                            0x020F
#define RAZER_BLADE_LATE_2016_PID                       0x0224
#define RAZER_BLADE_2018_ADVANCED_PID                   0x0233
#define RAZER_BLADE_2018_BASE_PID                       0x023B
#define RAZER_BLADE_2018_MERCURY_PID                    0x0240
#define RAZER_BLADE_2019_ADVANCED_PID                   0x023A
#define RAZER_BLADE_2019_BASE_PID                       0x0246
#define RAZER_BLADE_2019_MERCURY_PID                    0x0245
#define RAZER_BLADE_2019_STUDIO_PID                     0x024D
#define RAZER_BLADE_2020_ADVANCED_PID                   0x0253
#define RAZER_BLADE_2020_BASE_PID                       0x0255
#define RAZER_BLADE_LATE_2020_PID                       0x0268
#define RAZER_BLADE_2021_ADVANCED_PID                   0x026D
#define RAZER_BLADE_2021_BASE_PID                       0x026F

#define RAZER_BLADE_14_2021_PID                         0x0270

#define RAZER_BLADE_PRO_2016_PID                        0x0210
#define RAZER_BLADE_PRO_2017_PID                        0x0225
#define RAZER_BLADE_PRO_2017_FULLHD_PID                 0x022F
#define RAZER_BLADE_PRO_2019_PID                        0x0234
#define RAZER_BLADE_PRO_LATE_2019_PID                   0x024C
#define RAZER_BLADE_PRO_17_2020_PID                     0x0256
#define RAZER_BLADE_PRO_17_2021_PID                     0x0279

#define RAZER_BLADE_STEALTH_2016_PID                    0x0205
#define RAZER_BLADE_STEALTH_LATE_2016_PID               0x0220
#define RAZER_BLADE_STEALTH_2017_PID                    0x022D
#define RAZER_BLADE_STEALTH_LATE_2017_PID               0x0232
#define RAZER_BLADE_STEALTH_2019_PID                    0x0239
#define RAZER_BLADE_STEALTH_LATE_2019_PID               0x024A
#define RAZER_BLADE_STEALTH_2020_PID                    0x0252
#define RAZER_BLADE_STEALTH_LATE_2020_PID               0x0259

#define RAZER_BOOK_13_2020_PID                          0x026A

#define RAZER_CYNOSA_CHROMA_PID                         0x022A
#define RAZER_CYNOSA_LITE_PID                           0x023F
#define RAZER_CYNOSA_V2_PID                             0x025E
#define RAZER_DEATHSTALKER_CHROMA_PID                   0x0204
#define RAZER_HUNTSMAN_ELITE_PID                        0x0226
#define RAZER_HUNTSMAN_PID                              0x0227
#define RAZER_HUNTSMAN_MINI_PID                         0x0257
#define RAZER_HUNTSMAN_TE_PID                           0x0243
#define RAZER_HUNTSMAN_V2_ANALOG_PID                    0x0266
#define RAZER_HUNTSMAN_V2_TKL_PID                       0x026B
#define RAZER_HUNTSMAN_V2_PID                           0x026C
#define RAZER_ORBWEAVER_CHROMA_PID                      0x0207
#define RAZER_ORNATA_CHROMA_PID                         0x021E
#define RAZER_ORNATA_CHROMA_V2_PID                      0x025D
#define RAZER_TARTARUS_CHROMA_PID                       0x0208
#define RAZER_TARTARUS_V2_PID                           0x022B

/*-----------------------------------------------------*\
| Mouse product IDs                                     |
|   List taken from OpenRazer                           |
\*-----------------------------------------------------*/
#define RAZER_ABYSSUS_1800_PID                          0x0020
#define RAZER_ABYSSUS_2000_PID                          0x005E
#define RAZER_ABYSSUS_ELITE_DVA_EDITION_PID             0x006A
#define RAZER_ABYSSUS_ESSENTIAL_PID                     0x006B
#define RAZER_ABYSSUS_PID                               0x0042
#define RAZER_ABYSSUS_V2_PID                            0x005B
#define RAZER_ATHERIS_RECEIVER_PID                      0x0062
#define RAZER_BASILISK_PID                              0x0064
#define RAZER_BASILISK_ESSENTIAL_PID                    0x0065
#define RAZER_BASILISK_ULTIMATE_WIRED_PID               0x0086
#define RAZER_BASILISK_ULTIMATE_WIRELESS_PID            0x0088
#define RAZER_BASILISK_X_HYPERSPEED_PID                 0x0083
#define RAZER_BASILISK_V2_PID                           0x0085
#define RAZER_BASILISK_V3_PID                           0x0099
#define RAZER_DEATHADDER_1800_PID                       0x0038
#define RAZER_DEATHADDER_2000_PID                       0x004F
#define RAZER_DEATHADDER_2013_PID                       0x0037
#define RAZER_DEATHADDER_3_5G_PID                       0x0016
#define RAZER_DEATHADDER_3500_PID                       0x0054
#define RAZER_DEATHADDER_CHROMA_PID                     0x0043
#define RAZER_DEATHADDER_ELITE_PID                      0x005C
#define RAZER_DEATHADDER_ESSENTIAL_PID                  0x006E
#define RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID    0x0071
#define RAZER_DEATHADDER_V2_MINI_PID                    0x008C
#define RAZER_DEATHADDER_V2_PID                         0x0084
#define RAZER_DEATHADDER_V2_PRO_WIRED_PID               0x007C
#define RAZER_DEATHADDER_V2_PRO_WIRELESS_PID            0x007D
#define RAZER_DIAMONDBACK_CHROMA_PID                    0x004C
#define RAZER_IMPERATOR_PID                             0x002F
#define RAZER_LANCEHEAD_TE_WIRED_PID                    0x0060
#define RAZER_LANCEHEAD_2017_WIRED_PID                  0x0059
#define RAZER_LANCEHEAD_2017_WIRELESS_PID               0x005A
#define RAZER_LANCEHEAD_2019_WIRED_PID                  0x0070
#define RAZER_LANCEHEAD_2019_WIRELESS_PID               0x006F
#define RAZER_MAMBA_2012_WIRED_PID                      0x0024
#define RAZER_MAMBA_2012_WIRELESS_PID                   0x0025
#define RAZER_MAMBA_2015_WIRED_PID                      0x0044
#define RAZER_MAMBA_2015_WIRELESS_PID                   0x0045
#define RAZER_MAMBA_2018_WIRED_PID                      0x0073
#define RAZER_MAMBA_2018_WIRELESS_PID                   0x0072
#define RAZER_MAMBA_ELITE_PID                           0x006C
#define RAZER_MAMBA_TE_PID                              0x0046
#define RAZER_NAGA_2012_PID                             0x002E
#define RAZER_NAGA_2014_PID                             0x0040
#define RAZER_NAGA_CHROMA_PID                           0x0053
#define RAZER_NAGA_EPIC_CHROMA_DOCK_PID                 0x003F
#define RAZER_NAGA_EPIC_CHROMA_PID                      0x003E
#define RAZER_NAGA_HEX_PID                              0x0041
#define RAZER_NAGA_HEX_RED_PID                          0x0036
#define RAZER_NAGA_HEX_V2_PID                           0x0050
#define RAZER_NAGA_LEFT_HANDED_PID                      0x008D
#define RAZER_NAGA_TRINITY_PID                          0x0067
#define RAZER_NAGA_PRO_WIRED_PID                        0x008F
#define RAZER_NAGA_PRO_WIRELESS_PID                     0x0090
#define RAZER_OROCHI_2011_PID                           0x0013
#define RAZER_OROCHI_2013_PID                           0x0039
#define RAZER_OROCHI_CHROMA_PID                         0x0048
#define RAZER_OUROBOROS_PID                             0x0032
#define RAZER_TAIPAN_PID                                0x0034
#define RAZER_VIPER_8KHZ_PID                            0x0091
#define RAZER_VIPER_MINI_PID                            0x008A
#define RAZER_VIPER_PID                                 0x0078
#define RAZER_VIPER_ULTIMATE_WIRED_PID                  0x007A
#define RAZER_VIPER_ULTIMATE_WIRELESS_PID               0x007B

/*-----------------------------------------------------*\
| Headset product IDs                                   |
\*-----------------------------------------------------*/
#define RAZER_KRAKEN_CLASSIC_ALT_PID                    0x0506
#define RAZER_KRAKEN_CLASSIC_PID                        0x0501
#define RAZER_KRAKEN_KITTY_EDITION_PID                  0x0F19
#define RAZER_KRAKEN_KITTY_BLACK_EDITION_PID            0x0F21
#define RAZER_KRAKEN_PID                                0x0504
#define RAZER_KRAKEN_ULTIMATE_PID                       0x0527
#define RAZER_KRAKEN_V2_PID                             0x0510
#define RAZER_TIAMAT_71_V2_PID                          0x0F03

/*-----------------------------------------------------*\
| Accessory product IDs                                 |
|   List taken from OpenRazer                           |
\*-----------------------------------------------------*/
#define RAZER_BASE_STATION_CHROMA_PID                   0x0F08
#define RAZER_BASE_STATION_V2_CHROMA_PID                0x0F20
#define RAZER_CHARGING_PAD_CHROMA_PID                   0x0F26
#define RAZER_CHROMA_ADDRESSABLE_RGB_CONTROLLER_PID     0x0F1F
#define RAZER_CHROMA_HDK_PID                            0x0F09
#define RAZER_CHROMA_MUG_PID                            0x0F07
#define RAZER_CHROMA_PC_CASE_LIGHTING_KIT_PID           0x0F0E
#define RAZER_CORE_PID                                  0x0215
#define RAZER_CORE_X_PID                                0x0F1A
#define RAZER_FIREFLY_HYPERFLUX_PID                     0x0068
#define RAZER_FIREFLY_PID                               0x0C00
#define RAZER_FIREFLY_V2_PID                            0x0C04
#define RAZER_GOLIATHUS_CHROMA_EXTENDED_PID             0x0C02
#define RAZER_GOLIATHUS_CHROMA_PID                      0x0C01
#define RAZER_MOUSE_BUNGEE_V3_CHROMA_PID                0x0F1D
#define RAZER_MOUSE_DOCK_CHROMA_PID                     0x007E
#define RAZER_NOMMO_CHROMA_PID                          0x0517
#define RAZER_NOMMO_PRO_PID                             0x0518
#define RAZER_O11_DYNAMIC_PID                           0x0F13
#define RAZER_SEIREN_EMOTE_PID                          0x0F1B

typedef struct
{
    std::string name;
    unsigned int type;
    unsigned int rows;
    unsigned int cols;
} razer_zone;

typedef struct
{
    unsigned int zone;
    unsigned int row;
    unsigned int col;
    const char* name;
} razer_key;

typedef struct
{
    std::string name;
    unsigned short pid;
    device_type type;
    bool matrix_type;
    unsigned int rows;
    unsigned int cols;
    const razer_zone* zones[RAZER_MAX_ZONES];
    const razer_key* keymap;
    unsigned int keymap_size;
} razer_device;

/*-------------------------------------------------------------------------*\
|  KEYMAPS                                                                  |
\*-------------------------------------------------------------------------*/
#define BLACKWIDOW_CHROMA_KEYMAP_SIZE (sizeof(blackwidow_chroma_keymap) / sizeof(blackwidow_chroma_keymap[0]))

static const razer_key blackwidow_chroma_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      20,             "Logo"                              },
    {   0,      1,      0,              "Key: M1"                           },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      0,              "Key: M2"                           },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      0,              "Key: M3"                           },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      0,              "Key: M4"                           },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      0,              "Key: M5"                           },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define BLACKWIDOW_CHROMA_TE_KEYMAP_SIZE (sizeof(blackwidow_chroma_te_keymap) / sizeof(blackwidow_chroma_te_keymap[0]))

static const razer_key blackwidow_chroma_te_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      20,             "Logo"                              },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
};

#define BLACKWIDOW_V3_TKL_KEYMAP_SIZE (sizeof(blackwidow_v3_tkl_keymap) / sizeof(blackwidow_v3_tkl_keymap[0]))

static const razer_key blackwidow_v3_tkl_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
};

#define BLACKWIDOW_V3_MINI_KEYMAP_SIZE (sizeof(blackwidow_v3_mini_keymap) / sizeof(blackwidow_v3_mini_keymap[0]))

static const razer_key blackwidow_v3_mini_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      0,              KEY_EN_ESCAPE                       },
    {   0,      0,      1,              KEY_EN_1                            },
    {   0,      0,      2,              KEY_EN_2                            },
    {   0,      0,      3,              KEY_EN_3                            },
    {   0,      0,      4,              KEY_EN_4                            },
    {   0,      0,      5,              KEY_EN_5                            },
    {   0,      0,      6,              KEY_EN_6                            },
    {   0,      0,      7,              KEY_EN_7                            },
    {   0,      0,      8,              KEY_EN_8                            },
    {   0,      0,      9,              KEY_EN_9                            },
    {   0,      0,      10,             KEY_EN_0                            },
    {   0,      0,      11,             KEY_EN_MINUS                        },
    {   0,      0,      12,             KEY_EN_EQUALS                       },
    {   0,      0,      14,             KEY_EN_BACKSPACE                    },
    {   0,      0,      15,             KEY_EN_DELETE                       },
    {   0,      1,      0,              KEY_EN_TAB                          },
    {   0,      1,      1,              KEY_EN_Q                            },
    {   0,      1,      2,              KEY_EN_W                            },
    {   0,      1,      3,              KEY_EN_E                            },
    {   0,      1,      4,              KEY_EN_R                            },
    {   0,      1,      5,              KEY_EN_T                            },
    {   0,      1,      6,              KEY_EN_Y                            },
    {   0,      1,      7,              KEY_EN_U                            },
    {   0,      1,      8,              KEY_EN_I                            },
    {   0,      1,      9,              KEY_EN_O                            },
    {   0,      1,      10,             KEY_EN_P                            },
    {   0,      1,      11,             KEY_EN_LEFT_BRACKET                 },
    {   0,      1,      12,             KEY_EN_RIGHT_BRACKET                },
    {   0,      1,      13,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      1,      15,             KEY_EN_PAGE_UP                      },
    {   0,      2,      0,              KEY_EN_CAPS_LOCK                    },
    {   0,      2,      1,              KEY_EN_A                            },
    {   0,      2,      2,              KEY_EN_S                            },
    {   0,      2,      3,              KEY_EN_D                            },
    {   0,      2,      4,              KEY_EN_F                            },
    {   0,      2,      5,              KEY_EN_G                            },
    {   0,      2,      6,              KEY_EN_H                            },
    {   0,      2,      7,              KEY_EN_J                            },
    {   0,      2,      8,              KEY_EN_K                            },
    {   0,      2,      9,              KEY_EN_L                            },
    {   0,      2,      10,             KEY_EN_SEMICOLON                    },
    {   0,      2,      11,             KEY_EN_QUOTE                        },
    {   0,      2,      12,             KEY_EN_POUND                        },
    {   0,      2,      13,             KEY_EN_ANSI_ENTER                   },
    {   0,      2,      15,             KEY_EN_PAGE_DOWN                    },
    {   0,      3,      0,              KEY_EN_LEFT_SHIFT                   },
    {   0,      3,      1,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      3,      2,              KEY_EN_Z                            },
    {   0,      3,      3,              KEY_EN_X                            },
    {   0,      3,      4,              KEY_EN_C                            },
    {   0,      3,      5,              KEY_EN_V                            },
    {   0,      3,      6,              KEY_EN_B                            },
    {   0,      3,      7,              KEY_EN_N                            },
    {   0,      3,      8,              KEY_EN_M                            },
    {   0,      3,      9,              KEY_EN_COMMA                        },
    {   0,      3,      10,             KEY_EN_PERIOD                       },
    {   0,      3,      11,             KEY_EN_FORWARD_SLASH                },
    {   0,      3,      13,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      3,      14,             KEY_EN_UP_ARROW                     },
    {   0,      3,      15,             KEY_EN_INSERT                       },
    {   0,      4,      0,              KEY_EN_LEFT_CONTROL                 },
    {   0,      4,      1,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      4,      2,              KEY_EN_LEFT_ALT                     },
    {   0,      4,      6,              KEY_EN_SPACE                        },
    {   0,      4,      7,              "Logo"                              },
    {   0,      4,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      4,      11,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      4,      12,             KEY_EN_RIGHT_CONTROL                },
    {   0,      4,      13,             KEY_EN_LEFT_ARROW                   },
    {   0,      4,      14,             KEY_EN_DOWN_ARROW                   },
    {   0,      4,      15,             KEY_EN_RIGHT_ARROW                  },
};

#define BOOK_13_2020_KEYMAP_SIZE (sizeof(book_13_2020_keymap) / sizeof(book_13_2020_keymap[0]))

static const razer_key book_13_2020_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_F1                           },
    {   0,      0,      3,              KEY_EN_F2                           },
    {   0,      0,      4,              KEY_EN_F3                           },
    {   0,      0,      5,              KEY_EN_F4                           },
    {   0,      0,      6,              KEY_EN_F5                           },
    {   0,      0,      7,              KEY_EN_F6                           },
    {   0,      0,      8,              KEY_EN_F7                           },
    {   0,      0,      9,              KEY_EN_F8                           },
    {   0,      0,      10,             KEY_EN_F9                           },
    {   0,      0,      11,             KEY_EN_F10                          },
    {   0,      0,      12,             KEY_EN_F11                          },
    {   0,      0,      13,             KEY_EN_F12                          },
    {   0,      0,      14,             KEY_EN_DELETE                       },
    {   0,      0,      15,             "Key: Power"                        },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      15,             KEY_EN_BACKSPACE                    },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      15,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      15,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      15,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_FUNCTION                },
    {   0,      5,      3,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      5,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      9,              KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      12,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      13,             KEY_EN_UP_ARROW                     },
    {   0,      5,      14,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
};

#define BLADE_14_2021_KEYMAP_SIZE (sizeof(blade_14_2021_keymap) / sizeof(blade_14_2021_keymap[0]))

static const razer_key blade_14_2021_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_F1                           },
    {   0,      0,      3,              KEY_EN_F2                           },
    {   0,      0,      4,              KEY_EN_F3                           },
    {   0,      0,      5,              KEY_EN_F4                           },
    {   0,      0,      6,              KEY_EN_F5                           },
    {   0,      0,      7,              KEY_EN_F6                           },
    {   0,      0,      8,              KEY_EN_F7                           },
    {   0,      0,      9,              KEY_EN_F8                           },
    {   0,      0,      10,             KEY_EN_F9                           },
    {   0,      0,      11,             KEY_EN_F10                          },
    {   0,      0,      12,             KEY_EN_F11                          },
    {   0,      0,      13,             KEY_EN_F12                          },
    {   0,      0,      14,             KEY_EN_DELETE                       },
    {   0,      0,      15,             "Key: Power"                        },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      15,             KEY_EN_BACKSPACE                    },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      15,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      15,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      15,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_FUNCTION                },
    {   0,      5,      3,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      5,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      9,              KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      12,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      13,             KEY_EN_UP_ARROW                     },
    {   0,      5,      14,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
};

#define BLADE_17_PRO_2021_KEYMAP_SIZE (sizeof(blade_17_pro_2021_keymap) / sizeof(blade_17_pro_2021_keymap[0]))

static const razer_key blade_17_pro_2021_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_F1                           },
    {   0,      0,      3,              KEY_EN_F2                           },
    {   0,      0,      4,              KEY_EN_F3                           },
    {   0,      0,      5,              KEY_EN_F4                           },
    {   0,      0,      6,              KEY_EN_F5                           },
    {   0,      0,      7,              KEY_EN_F6                           },
    {   0,      0,      8,              KEY_EN_F7                           },
    {   0,      0,      9,              KEY_EN_F8                           },
    {   0,      0,      10,             KEY_EN_F9                           },
    {   0,      0,      11,             KEY_EN_F10                          },
    {   0,      0,      12,             KEY_EN_F11                          },
    {   0,      0,      13,             KEY_EN_F12                          },
    {   0,      0,      14,             KEY_EN_INSERT                       },
    {   0,      0,      15,             KEY_EN_DELETE                       },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      15,             KEY_EN_BACKSPACE                    },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      2,      15,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      15,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_FUNCTION                },
    {   0,      5,      3,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      5,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      9,              KEY_EN_RIGHT_ALT                    },
    {   0,      5,      10,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      11,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      12,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      13,             KEY_EN_UP_ARROW                     },
    {   0,      5,      14,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
};

#define BLADE_PRO_2017_KEYMAP_SIZE (sizeof(blade_pro_2017_keymap) / sizeof(blade_pro_2017_keymap[0]))

static const razer_key blade_pro_2017_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      2,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_INSERT                       },
    {   0,      0,      17,             KEY_EN_DELETE                       },
    {   0,      0,      19,             KEY_EN_MEDIA_PREVIOUS               },
    {   0,      0,      20,             KEY_EN_MEDIA_NEXT                   },
    {   0,      0,      21,             "Key: Media Volume"                 },
    {   0,      0,      23,             KEY_EN_MEDIA_PLAY_PAUSE             },
    {   0,      0,      24,             KEY_EN_MEDIA_MUTE                   },
    {   0,      1,      2,              KEY_EN_BACK_TICK                    },
    {   0,      1,      3,              KEY_EN_1                            },
    {   0,      1,      4,              KEY_EN_2                            },
    {   0,      1,      5,              KEY_EN_3                            },
    {   0,      1,      6,              KEY_EN_4                            },
    {   0,      1,      7,              KEY_EN_5                            },
    {   0,      1,      8,              KEY_EN_6                            },
    {   0,      1,      9,              KEY_EN_7                            },
    {   0,      1,      10,             KEY_EN_8                            },
    {   0,      1,      11,             KEY_EN_9                            },
    {   0,      1,      12,             KEY_EN_0                            },
    {   0,      1,      13,             KEY_EN_MINUS                        },
    {   0,      1,      14,             KEY_EN_EQUALS                       },
    {   0,      1,      15,             KEY_EN_BACKSPACE                    },
    {   0,      2,      2,              KEY_EN_TAB                          },
    {   0,      2,      4,              KEY_EN_Q                            },
    {   0,      2,      5,              KEY_EN_W                            },
    {   0,      2,      6,              KEY_EN_E                            },
    {   0,      2,      7,              KEY_EN_R                            },
    {   0,      2,      8,              KEY_EN_T                            },
    {   0,      2,      9,              KEY_EN_Y                            },
    {   0,      2,      10,             KEY_EN_U                            },
    {   0,      2,      11,             KEY_EN_I                            },
    {   0,      2,      12,             KEY_EN_O                            },
    {   0,      2,      13,             KEY_EN_P                            },
    {   0,      2,      14,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      15,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      17,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      4,              KEY_EN_A                            },
    {   0,      3,      5,              KEY_EN_S                            },
    {   0,      3,      6,              KEY_EN_D                            },
    {   0,      3,      7,              KEY_EN_F                            },
    {   0,      3,      8,              KEY_EN_G                            },
    {   0,      3,      9,              KEY_EN_H                            },
    {   0,      3,      10,             KEY_EN_J                            },
    {   0,      3,      11,             KEY_EN_K                            },
    {   0,      3,      12,             KEY_EN_L                            },
    {   0,      3,      13,             KEY_EN_SEMICOLON                    },
    {   0,      3,      14,             KEY_EN_QUOTE                        },
    {   0,      3,      18,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      0,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      4,              KEY_EN_Z                            },
    {   0,      4,      5,              KEY_EN_X                            },
    {   0,      4,      6,              KEY_EN_C                            },
    {   0,      4,      7,              KEY_EN_V                            },
    {   0,      4,      8,              KEY_EN_B                            },
    {   0,      4,      9,              KEY_EN_N                            },
    {   0,      4,      10,             KEY_EN_M                            },
    {   0,      4,      11,             KEY_EN_COMMA                        },
    {   0,      4,      12,             KEY_EN_PERIOD                       },
    {   0,      4,      13,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      5,      0,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_FUNCTION                },
    {   0,      5,      3,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      5,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      13,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      14,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      15,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      16,             KEY_EN_RIGHT_FUNCTION               },
};

#define BLADE_STEALTH_2016_KEYMAP_SIZE (sizeof(blade_stealth_2016_keymap) / sizeof(blade_stealth_2016_keymap[0]))

static const razer_key blade_stealth_2016_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_F1                           },
    {   0,      0,      3,              KEY_EN_F2                           },
    {   0,      0,      4,              KEY_EN_F3                           },
    {   0,      0,      5,              KEY_EN_F4                           },
    {   0,      0,      6,              KEY_EN_F5                           },
    {   0,      0,      7,              KEY_EN_F6                           },
    {   0,      0,      8,              KEY_EN_F7                           },
    {   0,      0,      9,              KEY_EN_F8                           },
    {   0,      0,      10,             KEY_EN_F9                           },
    {   0,      0,      11,             KEY_EN_F10                          },
    {   0,      0,      12,             KEY_EN_F11                          },
    {   0,      0,      13,             KEY_EN_F12                          },
    {   0,      0,      14,             KEY_EN_INSERT                       },
    {   0,      0,      15,             KEY_EN_DELETE                       },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_BACKSPACE                    },
    {   0,      2,      0,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      3,      0,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      15,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      0,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_Z                            },
    {   0,      4,      3,              KEY_EN_X                            },
    {   0,      4,      4,              KEY_EN_C                            },
    {   0,      4,      5,              KEY_EN_V                            },
    {   0,      4,      6,              KEY_EN_B                            },
    {   0,      4,      7,              KEY_EN_N                            },
    {   0,      4,      8,              KEY_EN_M                            },
    {   0,      4,      9,              KEY_EN_COMMA                        },
    {   0,      4,      10,             KEY_EN_PERIOD                       },
    {   0,      4,      11,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      12,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      13,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      5,      0,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      1,              KEY_EN_LEFT_FUNCTION                },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      5,              KEY_EN_SPACE                        },
    {   0,      5,      6,              KEY_EN_SPACE                        },
    {   0,      5,      8,              KEY_EN_SPACE                        },
    {   0,      5,      9,              KEY_EN_RIGHT_ALT                    },
    {   0,      5,      10,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      11,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      12,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      13,             KEY_EN_UP_ARROW                     },
    {   0,      5,      14,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
};

#define CYNOSA_CHROMA_KEYMAP_SIZE (sizeof(cynosa_chroma_keymap) / sizeof(cynosa_chroma_keymap[0]))

static const razer_key cynosa_chroma_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      20,             "Logo"                              },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,            KEY_EN_NUMPAD_0                      },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define CYNOSA_CHROMA_V2_KEYMAP_SIZE (sizeof(cynosa_chroma_v2_keymap) / sizeof(cynosa_chroma_v2_keymap[0]))

static const razer_key cynosa_chroma_v2_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      20,             "Logo"                              },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define HUNTSMAN_ELITE_KEYMAP_SIZE (sizeof(huntsman_elite_keymap) / sizeof(huntsman_elite_keymap[0]))

static const razer_key huntsman_elite_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      18,             KEY_EN_MEDIA_PREVIOUS               },
    {   0,      0,      19,             KEY_EN_MEDIA_PLAY_PAUSE             },
    {   0,      0,      20,             KEY_EN_MEDIA_NEXT                   },
    {   0,      0,      21,             KEY_EN_MEDIA_MUTE                   },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define HUNTSMAN_V2_ANALOG_KEYMAP_SIZE (sizeof(huntsman_v2_analog_keymap) / sizeof(huntsman_v2_analog_keymap[0]))

static const razer_key huntsman_v2_analog_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      18,             KEY_EN_MEDIA_PREVIOUS               },
    {   0,      0,      19,             KEY_EN_MEDIA_PLAY_PAUSE             },
    {   0,      0,      20,             KEY_EN_MEDIA_NEXT                   },
    {   0,      0,      21,             KEY_EN_MEDIA_MUTE                   },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define HUNTSMAN_KEYMAP_SIZE (sizeof(huntsman_keymap) / sizeof(huntsman_keymap[0]))

static const razer_key huntsman_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define HUNTSMAN_MINI_KEYMAP_SIZE (sizeof(huntsman_mini_keymap) / sizeof(huntsman_mini_keymap[0]))

static const razer_key huntsman_mini_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_1                            },
    {   0,      0,      3,              KEY_EN_2                            },
    {   0,      0,      4,              KEY_EN_3                            },
    {   0,      0,      5,              KEY_EN_4                            },
    {   0,      0,      6,              KEY_EN_5                            },
    {   0,      0,      7,              KEY_EN_6                            },
    {   0,      0,      8,              KEY_EN_7                            },
    {   0,      0,      9,              KEY_EN_8                            },
    {   0,      0,      10,             KEY_EN_9                            },
    {   0,      0,      11,             KEY_EN_0                            },
    {   0,      0,      12,             KEY_EN_MINUS                        },
    {   0,      0,      13,             KEY_EN_EQUALS                       },
    {   0,      0,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      1,              KEY_EN_TAB                          },
    {   0,      1,      2,              KEY_EN_Q                            },
    {   0,      1,      3,              KEY_EN_W                            },
    {   0,      1,      4,              KEY_EN_E                            },
    {   0,      1,      5,              KEY_EN_R                            },
    {   0,      1,      6,              KEY_EN_T                            },
    {   0,      1,      7,              KEY_EN_Y                            },
    {   0,      1,      8,              KEY_EN_U                            },
    {   0,      1,      9,              KEY_EN_I                            },
    {   0,      1,      10,             KEY_EN_O                            },
    {   0,      1,      11,             KEY_EN_P                            },
    {   0,      1,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      1,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      1,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      2,      2,              KEY_EN_A                            },
    {   0,      2,      3,              KEY_EN_S                            },
    {   0,      2,      4,              KEY_EN_D                            },
    {   0,      2,      5,              KEY_EN_F                            },
    {   0,      2,      6,              KEY_EN_G                            },
    {   0,      2,      7,              KEY_EN_H                            },
    {   0,      2,      8,              KEY_EN_J                            },
    {   0,      2,      9,              KEY_EN_K                            },
    {   0,      2,      10,             KEY_EN_L                            },
    {   0,      2,      11,             KEY_EN_SEMICOLON                    },
    {   0,      2,      12,             KEY_EN_QUOTE                        },
    {   0,      2,      13,             KEY_EN_POUND                        },
    {   0,      2,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      3,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      3,      3,              KEY_EN_Z                            },
    {   0,      3,      4,              KEY_EN_X                            },
    {   0,      3,      5,              KEY_EN_C                            },
    {   0,      3,      6,              KEY_EN_V                            },
    {   0,      3,      7,              KEY_EN_B                            },
    {   0,      3,      8,              KEY_EN_N                            },
    {   0,      3,      9,              KEY_EN_M                            },
    {   0,      3,      10,             KEY_EN_COMMA                        },
    {   0,      3,      11,             KEY_EN_PERIOD                       },
    {   0,      3,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      3,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      4,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      4,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      4,      7,              KEY_EN_SPACE                        },
    {   0,      4,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      4,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      4,      13,             KEY_EN_MENU                         },
    {   0,      4,      14,             KEY_EN_RIGHT_CONTROL                },
};

#define HUNTSMAN_TE_KEYMAP_SIZE (sizeof(huntsman_te_keymap) / sizeof(huntsman_te_keymap[0]))

static const razer_key huntsman_te_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
};

#define HUNTSMAN_V2_KEYMAP_SIZE (sizeof(huntsman_v2_keymap) / sizeof(huntsman_v2_keymap[0]))

static const razer_key huntsman_v2_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      0,              KEY_EN_ESCAPE                       },
    {   0,      0,      2,              KEY_EN_F1                           },
    {   0,      0,      3,              KEY_EN_F2                           },
    {   0,      0,      4,              KEY_EN_F3                           },
    {   0,      0,      5,              KEY_EN_F4                           },
    {   0,      0,      6,              KEY_EN_F5                           },
    {   0,      0,      7,              KEY_EN_F6                           },
    {   0,      0,      8,              KEY_EN_F7                           },
    {   0,      0,      9,              KEY_EN_F8                           },
    {   0,      0,      10,             KEY_EN_F9                           },
    {   0,      0,      11,             KEY_EN_F10                          },
    {   0,      0,      12,             KEY_EN_F11                          },
    {   0,      0,      13,             KEY_EN_F12                          },
    {   0,      0,      14,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      15,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      16,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      17,             KEY_EN_MEDIA_PREVIOUS               },
    {   0,      0,      18,             KEY_EN_MEDIA_PLAY_PAUSE             },
    {   0,      0,      19,             KEY_EN_MEDIA_NEXT                   },
    {   0,      0,      20,             KEY_EN_MEDIA_MUTE                   },
    {   0,      1,      0,              KEY_EN_BACK_TICK                    },
    {   0,      1,      1,              KEY_EN_1                            },
    {   0,      1,      2,              KEY_EN_2                            },
    {   0,      1,      3,              KEY_EN_3                            },
    {   0,      1,      4,              KEY_EN_4                            },
    {   0,      1,      5,              KEY_EN_5                            },
    {   0,      1,      6,              KEY_EN_6                            },
    {   0,      1,      7,              KEY_EN_7                            },
    {   0,      1,      8,              KEY_EN_8                            },
    {   0,      1,      9,              KEY_EN_9                            },
    {   0,      1,      10,             KEY_EN_0                            },
    {   0,      1,      11,             KEY_EN_MINUS                        },
    {   0,      1,      12,             KEY_EN_EQUALS                       },
    {   0,      1,      13,             KEY_EN_BACKSPACE                    },
    {   0,      1,      14,             KEY_EN_INSERT                       },
    {   0,      1,      15,             KEY_EN_HOME                         },
    {   0,      1,      16,             KEY_EN_PAGE_UP                      },
    {   0,      1,      17,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      18,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      19,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      20,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      0,              KEY_EN_TAB                          },
    {   0,      2,      1,              KEY_EN_Q                            },
    {   0,      2,      2,              KEY_EN_W                            },
    {   0,      2,      3,              KEY_EN_E                            },
    {   0,      2,      4,              KEY_EN_R                            },
    {   0,      2,      5,              KEY_EN_T                            },
    {   0,      2,      6,              KEY_EN_Y                            },
    {   0,      2,      7,              KEY_EN_U                            },
    {   0,      2,      8,              KEY_EN_I                            },
    {   0,      2,      9,              KEY_EN_O                            },
    {   0,      2,      10,             KEY_EN_P                            },
    {   0,      2,      11,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      12,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      13,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      14,             KEY_EN_DELETE                       },
    {   0,      2,      15,             KEY_EN_END                          },
    {   0,      2,      16,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      17,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      18,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      0,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      1,              KEY_EN_A                            },
    {   0,      3,      2,              KEY_EN_S                            },
    {   0,      3,      3,              KEY_EN_D                            },
    {   0,      3,      4,              KEY_EN_F                            },
    {   0,      3,      5,              KEY_EN_G                            },
    {   0,      3,      6,              KEY_EN_H                            },
    {   0,      3,      7,              KEY_EN_J                            },
    {   0,      3,      8,              KEY_EN_K                            },
    {   0,      3,      9,              KEY_EN_L                            },
    {   0,      3,      10,             KEY_EN_SEMICOLON                    },
    {   0,      3,      11,             KEY_EN_QUOTE                        },
    {   0,      3,      12,             KEY_EN_POUND                        },
    {   0,      3,      13,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      17,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      18,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      0,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      1,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      2,              KEY_EN_Z                            },
    {   0,      4,      3,              KEY_EN_X                            },
    {   0,      4,      4,              KEY_EN_C                            },
    {   0,      4,      5,              KEY_EN_V                            },
    {   0,      4,      6,              KEY_EN_B                            },
    {   0,      4,      7,              KEY_EN_N                            },
    {   0,      4,      8,              KEY_EN_M                            },
    {   0,      4,      9,              KEY_EN_COMMA                        },
    {   0,      4,      10,             KEY_EN_PERIOD                       },
    {   0,      4,      11,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      13,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      15,             KEY_EN_UP_ARROW                     },
    {   0,      4,      17,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      0,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      1,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      2,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      6,              KEY_EN_SPACE                        },
    {   0,      5,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      12,             KEY_EN_MENU                         },
    {   0,      5,      13,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      14,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      16,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      18,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      19,             KEY_EN_NUMPAD_PERIOD                },
};

#define HUNTSMAN_V2_TKL_KEYMAP_SIZE (sizeof(huntsman_v2_tkl_keymap) / sizeof(huntsman_v2_tkl_keymap[0]))

static const razer_key huntsman_v2_tkl_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
};

#define BLACKWIDOW_ELITE_KEYMAP_SIZE (sizeof(blackwidow_elite_keymap) / sizeof(blackwidow_elite_keymap[0]))

static const razer_key blackwidow_elite_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      18,             KEY_EN_MEDIA_PREVIOUS               },
    {   0,      0,      19,             KEY_EN_MEDIA_PLAY_PAUSE             },
    {   0,      0,      20,             KEY_EN_MEDIA_NEXT                   },
    {   0,      0,      21,             KEY_EN_MEDIA_MUTE                   },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      6,              KEY_EN_SPACE                        },
    {   0,      5,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             "Logo"                              },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,            KEY_EN_NUMPAD_0                      },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define BLACKWIDOW_CHROMA_V2_KEYMAP_SIZE (sizeof(blackwidow_chroma_v2_keymap) / sizeof(blackwidow_chroma_v2_keymap[0]))

static const razer_key blackwidow_chroma_v2_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      0,      20,             "Logo"                              },
    {   0,      1,      0,              "Key: M1"                           },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      0,              "Key: M2"                           },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      0,              "Key: M3"                           },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      0,              "Key: M4"                           },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      0,              "Key: M5"                           },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define BLACKWIDOW_2019_KEYMAP_SIZE (sizeof(blackwidow_2019_keymap) / sizeof(blackwidow_2019_keymap[0]))

static const razer_key blackwidow_2019_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      6,              KEY_EN_SPACE                        },
    {   0,      5,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             "Logo"                              },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             "Key: Number Pad ,"                 },
};

#define BLACKWIDOW_V3_PRO_KEYMAP_SIZE (sizeof(blackwidow_v3_pro_keymap) / sizeof(blackwidow_v3_pro_keymap[0]))

static const razer_key blackwidow_v3_pro_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      6,              KEY_EN_SPACE                        },
    {   0,      5,      10,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      11,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      12,             KEY_EN_MENU                         },
    {   0,      5,      13,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      14,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      15,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      16,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      18,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      19,             "Key: Number Pad ,"                 },
};

#define ORNATA_CHROMA_KEYMAP_SIZE (sizeof(ornata_chroma_keymap) / sizeof(ornata_chroma_keymap[0]))

static const razer_key ornata_chroma_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      1,              KEY_EN_ESCAPE                       },
    {   0,      0,      3,              KEY_EN_F1                           },
    {   0,      0,      4,              KEY_EN_F2                           },
    {   0,      0,      5,              KEY_EN_F3                           },
    {   0,      0,      6,              KEY_EN_F4                           },
    {   0,      0,      7,              KEY_EN_F5                           },
    {   0,      0,      8,              KEY_EN_F6                           },
    {   0,      0,      9,              KEY_EN_F7                           },
    {   0,      0,      10,             KEY_EN_F8                           },
    {   0,      0,      11,             KEY_EN_F9                           },
    {   0,      0,      12,             KEY_EN_F10                          },
    {   0,      0,      13,             KEY_EN_F11                          },
    {   0,      0,      14,             KEY_EN_F12                          },
    {   0,      0,      15,             KEY_EN_PRINT_SCREEN                 },
    {   0,      0,      16,             KEY_EN_SCROLL_LOCK                  },
    {   0,      0,      17,             KEY_EN_PAUSE_BREAK                  },
    {   0,      1,      1,              KEY_EN_BACK_TICK                    },
    {   0,      1,      2,              KEY_EN_1                            },
    {   0,      1,      3,              KEY_EN_2                            },
    {   0,      1,      4,              KEY_EN_3                            },
    {   0,      1,      5,              KEY_EN_4                            },
    {   0,      1,      6,              KEY_EN_5                            },
    {   0,      1,      7,              KEY_EN_6                            },
    {   0,      1,      8,              KEY_EN_7                            },
    {   0,      1,      9,              KEY_EN_8                            },
    {   0,      1,      10,             KEY_EN_9                            },
    {   0,      1,      11,             KEY_EN_0                            },
    {   0,      1,      12,             KEY_EN_MINUS                        },
    {   0,      1,      13,             KEY_EN_EQUALS                       },
    {   0,      1,      14,             KEY_EN_BACKSPACE                    },
    {   0,      1,      15,             KEY_EN_INSERT                       },
    {   0,      1,      16,             KEY_EN_HOME                         },
    {   0,      1,      17,             KEY_EN_PAGE_UP                      },
    {   0,      1,      18,             KEY_EN_NUMPAD_LOCK                  },
    {   0,      1,      19,             KEY_EN_NUMPAD_DIVIDE                },
    {   0,      1,      20,             KEY_EN_NUMPAD_TIMES                 },
    {   0,      1,      21,             KEY_EN_NUMPAD_MINUS                 },
    {   0,      2,      1,              KEY_EN_TAB                          },
    {   0,      2,      2,              KEY_EN_Q                            },
    {   0,      2,      3,              KEY_EN_W                            },
    {   0,      2,      4,              KEY_EN_E                            },
    {   0,      2,      5,              KEY_EN_R                            },
    {   0,      2,      6,              KEY_EN_T                            },
    {   0,      2,      7,              KEY_EN_Y                            },
    {   0,      2,      8,              KEY_EN_U                            },
    {   0,      2,      9,              KEY_EN_I                            },
    {   0,      2,      10,             KEY_EN_O                            },
    {   0,      2,      11,             KEY_EN_P                            },
    {   0,      2,      12,             KEY_EN_LEFT_BRACKET                 },
    {   0,      2,      13,             KEY_EN_RIGHT_BRACKET                },
    {   0,      2,      14,             KEY_EN_ANSI_BACK_SLASH              },
    {   0,      2,      15,             KEY_EN_DELETE                       },
    {   0,      2,      16,             KEY_EN_END                          },
    {   0,      2,      17,             KEY_EN_PAGE_DOWN                    },
    {   0,      2,      18,             KEY_EN_NUMPAD_7                     },
    {   0,      2,      19,             KEY_EN_NUMPAD_8                     },
    {   0,      2,      20,             KEY_EN_NUMPAD_9                     },
    {   0,      2,      21,             KEY_EN_NUMPAD_PLUS                  },
    {   0,      3,      1,              KEY_EN_CAPS_LOCK                    },
    {   0,      3,      2,              KEY_EN_A                            },
    {   0,      3,      3,              KEY_EN_S                            },
    {   0,      3,      4,              KEY_EN_D                            },
    {   0,      3,      5,              KEY_EN_F                            },
    {   0,      3,      6,              KEY_EN_G                            },
    {   0,      3,      7,              KEY_EN_H                            },
    {   0,      3,      8,              KEY_EN_J                            },
    {   0,      3,      9,              KEY_EN_K                            },
    {   0,      3,      10,             KEY_EN_L                            },
    {   0,      3,      11,             KEY_EN_SEMICOLON                    },
    {   0,      3,      12,             KEY_EN_QUOTE                        },
    {   0,      3,      13,             KEY_EN_POUND                        },
    {   0,      3,      14,             KEY_EN_ANSI_ENTER                   },
    {   0,      3,      18,             KEY_EN_NUMPAD_4                     },
    {   0,      3,      19,             KEY_EN_NUMPAD_5                     },
    {   0,      3,      20,             KEY_EN_NUMPAD_6                     },
    {   0,      4,      1,              KEY_EN_LEFT_SHIFT                   },
    {   0,      4,      2,              KEY_EN_ISO_BACK_SLASH               },
    {   0,      4,      3,              KEY_EN_Z                            },
    {   0,      4,      4,              KEY_EN_X                            },
    {   0,      4,      5,              KEY_EN_C                            },
    {   0,      4,      6,              KEY_EN_V                            },
    {   0,      4,      7,              KEY_EN_B                            },
    {   0,      4,      8,              KEY_EN_N                            },
    {   0,      4,      9,              KEY_EN_M                            },
    {   0,      4,      10,             KEY_EN_COMMA                        },
    {   0,      4,      11,             KEY_EN_PERIOD                       },
    {   0,      4,      12,             KEY_EN_FORWARD_SLASH                },
    {   0,      4,      14,             KEY_EN_RIGHT_SHIFT                  },
    {   0,      4,      16,             KEY_EN_UP_ARROW                     },
    {   0,      4,      18,             KEY_EN_NUMPAD_1                     },
    {   0,      4,      19,             KEY_EN_NUMPAD_2                     },
    {   0,      4,      20,             KEY_EN_NUMPAD_3                     },
    {   0,      4,      21,             KEY_EN_NUMPAD_ENTER                 },
    {   0,      5,      1,              KEY_EN_LEFT_CONTROL                 },
    {   0,      5,      2,              KEY_EN_LEFT_WINDOWS                 },
    {   0,      5,      3,              KEY_EN_LEFT_ALT                     },
    {   0,      5,      7,              KEY_EN_SPACE                        },
    {   0,      5,      11,             KEY_EN_RIGHT_ALT                    },
    {   0,      5,      12,             KEY_EN_RIGHT_FUNCTION               },
    {   0,      5,      13,             KEY_EN_MENU                         },
    {   0,      5,      14,             KEY_EN_RIGHT_CONTROL                },
    {   0,      5,      15,             KEY_EN_LEFT_ARROW                   },
    {   0,      5,      16,             KEY_EN_DOWN_ARROW                   },
    {   0,      5,      17,             KEY_EN_RIGHT_ARROW                  },
    {   0,      5,      19,             KEY_EN_NUMPAD_0                     },
    {   0,      5,      20,             KEY_EN_NUMPAD_PERIOD                },
};

#define TARTARUS_V2_KEYMAP_SIZE (sizeof(tartarus_v2_keymap) / sizeof(tartarus_v2_keymap[0]))

static const razer_key tartarus_v2_keymap[] =
{
    /*---------------------------------------------------------------------*\
    |   Zone,   Row,    Column,         Key                                 |
    \*---------------------------------------------------------------------*/
    {   0,      0,      0,              "Key: 01"                           },
    {   0,      0,      1,              "Key: 02"                           },
    {   0,      0,      2,              "Key: 03"                           },
    {   0,      0,      3,              "Key: 04"                           },
    {   0,      0,      4,              "Key: 05"                           },
    {   0,      1,      0,              "Key: 06"                           },
    {   0,      1,      1,              "Key: 07"                           },
    {   0,      1,      2,              "Key: 08"                           },
    {   0,      1,      3,              "Key: 09"                           },
    {   0,      1,      4,              "Key: 10"                           },
    {   0,      2,      0,              "Key: 11"                           },
    {   0,      2,      1,              "Key: 12"                           },
    {   0,      2,      2,              "Key: 13"                           },
    {   0,      2,      3,              "Key: 14"                           },
    {   0,      2,      4,              "Key: 15"                           },
    {   0,      3,      0,              "Key: 16"                           },
    {   0,      3,      1,              "Key: 17"                           },
    {   0,      3,      2,              "Key: 18"                           },
    {   0,      3,      3,              "Key: 19"                           },
    {   0,      3,      4,              "Key: Scroll Wheel"                 },
    {   0,      3,      5,              "Key: 20"                           },
};

/*-------------------------------------------------------------------------*\
|  KEYBOARDS                                                                |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Blackwidow 2019 1532:0241                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_2019_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_2019_device =
{
    "Razer BlackWidow 2019",
    RAZER_BLACKWIDOW_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_2019_keymap,
    BLACKWIDOW_2019_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow Chroma                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_device =
{
    "Razer BlackWidow Chroma",
    RAZER_BLACKWIDOW_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_chroma_keymap,
    BLACKWIDOW_CHROMA_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Chroma Overwatch 1532:0211                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_overwatch_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_overwatch_device =
{
    "Razer Blackwidow Chroma Overwatch",
    RAZER_BLACKWIDOW_OVERWATCH_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_chroma_overwatch_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 1532:024E                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_device =
{
    "Razer Blackwidow V3",
    RAZER_BLACKWIDOW_V3_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_v3_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow Chroma Tournament Edition                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_te_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_te_device =
{
    "Razer BlackWidow Chroma Tournament Edition",
    RAZER_BLACKWIDOW_CHROMA_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_chroma_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_chroma_te_keymap,
    BLACKWIDOW_CHROMA_TE_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Elite 1532:0228                             |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_elite_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_elite_device =
{
    "Razer BlackWidow Elite",
    RAZER_BLACKWIDOW_ELITE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_elite_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_elite_keymap,
    BLACKWIDOW_ELITE_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow Chroma V2 1532:0221                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_chroma_v2_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_chroma_v2_device =
{
    "Razer BlackWidow Chroma V2",
    RAZER_BLACKWIDOW_CHROMA_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_chroma_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_chroma_v2_keymap,
    BLACKWIDOW_CHROMA_V2_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Wired) 1532:025A                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_wired_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_wired_device =
{
    "Razer BlackWidow V3 Pro (Wired)",
    RAZER_BLACKWIDOW_V3_PRO_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_v3_pro_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_pro_keymap,
    BLACKWIDOW_V3_PRO_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Bluetooth) 1532:025B                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_bluetooth_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_bluetooth_device =
{
    "Razer BlackWidow V3 Pro (Bluetooth)",
    RAZER_BLACKWIDOW_V3_PRO_BLUETOOTH_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_v3_pro_bluetooth_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_pro_keymap,
    BLACKWIDOW_V3_PRO_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Pro (Wireless) 1532:025C                 |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_pro_wireless_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_v3_pro_wireless_device =
{
    "Razer BlackWidow V3 Pro (Wireless)",
    RAZER_BLACKWIDOW_V3_PRO_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_v3_pro_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_pro_keymap,
    BLACKWIDOW_V3_PRO_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 TKL 1532:0A24                            |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 18 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_tkl_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    18
};

static const razer_device blackwidow_v3_tkl_device =
{
    "Razer BlackWidow V3 TKL",
    RAZER_BLACKWIDOW_V3_TKL_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    18,
    {
        &blackwidow_v3_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_tkl_keymap,
    BLACKWIDOW_V3_TKL_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Mini (Wired) 1532:0258                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_v3_mini_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    5,
    16
};

static const razer_device blackwidow_v3_mini_wired_device =
{
    "Razer BlackWidow V3 Mini (Wired)",
    RAZER_BLACKWIDOW_V3_MINI_WIRED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    5,
    16,
    {
        &blackwidow_v3_mini_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_mini_keymap,
    BLACKWIDOW_V3_MINI_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow V3 Mini (Wireless) 1532:0271                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_device blackwidow_v3_mini_wireless_device =
{
    "Razer BlackWidow V3 Mini (Wireless)",
    RAZER_BLACKWIDOW_V3_MINI_WIRELESS_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    5,
    16,
    {
        &blackwidow_v3_mini_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blackwidow_v3_mini_keymap,
    BLACKWIDOW_V3_MINI_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blackwidow X Chroma 1532:0216                          |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_x_chroma_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_x_chroma_device =
{
    "Razer BlackWidow X Chroma",
    RAZER_BLACKWIDOW_X_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_x_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer BlackWidow X Chroma Tournament Edition 1532:021A       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blackwidow_x_chroma_te_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device blackwidow_x_chroma_te_device =
{
    "Razer BlackWidow X Chroma Tournament Edition",
    RAZER_BLACKWIDOW_X_CHROMA_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &blackwidow_x_chroma_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Cynosa Chroma 1532:022A                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_chroma_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device cynosa_chroma_device =
{
    "Razer Cynosa Chroma",
    RAZER_CYNOSA_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &cynosa_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    cynosa_chroma_keymap,
    CYNOSA_CHROMA_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Cynosa v2 1532:025E                                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_v2_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device cynosa_v2_device =
{
    "Razer Cynosa v2",
    RAZER_CYNOSA_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &cynosa_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    cynosa_chroma_v2_keymap,
    CYNOSA_CHROMA_V2_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Cynosa Lite 1532:023F                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone cynosa_lite_zone =
{
    "Keyboard",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device cynosa_lite_device =
{
    "Razer Cynosa Lite",
    RAZER_CYNOSA_LITE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    1,
    1,
    {
        &cynosa_lite_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Ornata Chroma                                          |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone ornata_chroma_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device ornata_chroma_device =
{
    "Razer Ornata Chroma",
    RAZER_ORNATA_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &ornata_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    ornata_chroma_keymap,
    ORNATA_CHROMA_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer DeathStalker Chroma                                    |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       12 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone deathstalker_chroma_zone =
{
    "Keyboard",
    ZONE_TYPE_LINEAR,
    1,
    12
};

static const razer_device deathstalker_chroma_device =
{
    "Razer DeathStalker Chroma",
    RAZER_DEATHSTALKER_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    1,
    12,
    {
        &deathstalker_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Huntsman 1532:0227                                     |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device huntsman_device =
{
    "Razer Huntsman",
    RAZER_HUNTSMAN_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    22,
    {
        &huntsman_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_keymap,
    HUNTSMAN_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman Elite                                         |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
|                                                               |
| Zone "Underglow"                                              |
|       Matrix                                                  |
|       3 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_elite_keyboard_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_zone huntsman_elite_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_MATRIX,
    3,
    22
};

static const razer_device huntsman_elite_device =
{
    "Razer Huntsman Elite",
    RAZER_HUNTSMAN_ELITE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    9,
    22,
    {
        &huntsman_elite_keyboard_zone,
        &huntsman_elite_underglow_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_elite_keymap,
    HUNTSMAN_ELITE_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 Analog                                     |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
|                                                               |
| Zone "Underglow"                                              |
|       Matrix                                                  |
|       3 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_analog_keyboard_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_zone huntsman_v2_analog_underglow_zone =
{
    "Underglow",
    ZONE_TYPE_MATRIX,
    3,
    22
};

static const razer_device huntsman_v2_analog_device =
{
    "Razer Huntsman V2 Analog",
    RAZER_HUNTSMAN_V2_ANALOG_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    9,
    22,
    {
        &huntsman_v2_analog_keyboard_zone,
        &huntsman_v2_analog_underglow_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_v2_analog_keymap,
    HUNTSMAN_V2_ANALOG_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman Mini 1532:0257                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       5 Rows, 15 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_mini_keyboard_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    5,
    15
};

static const razer_device huntsman_mini_device =
{
    "Razer Huntsman Mini",
    RAZER_HUNTSMAN_MINI_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    5,
    15,
    {
        &huntsman_mini_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_mini_keymap,
    HUNTSMAN_MINI_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman TE 1532:0243                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 18 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_te_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    18
};

static const razer_device huntsman_te_device =
{
    "Razer Huntsman Tournament Edition",
    RAZER_HUNTSMAN_TE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    18,
    {
        &huntsman_te_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_te_keymap,
    HUNTSMAN_TE_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 TKL 1532:026B                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 18 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_tkl_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    18
};

static const razer_device huntsman_v2_tkl_device =
{
    "Razer Huntsman V2 TKL",
    RAZER_HUNTSMAN_V2_TKL_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    18,
    {
        &huntsman_v2_tkl_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_v2_tkl_keymap,
    HUNTSMAN_V2_TKL_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Huntsman V2 1532:026C                                  |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 22 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone huntsman_v2_keyboard_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    22
};

static const razer_device huntsman_v2_device =
{
    "Razer Huntsman V2",
    RAZER_HUNTSMAN_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    9,
    22,
    {
        &huntsman_v2_keyboard_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    huntsman_v2_keymap,
    HUNTSMAN_V2_KEYMAP_SIZE
};

/*-------------------------------------------------------------------------*\
|  LAPTOPS                                                                  |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Blade (2016)                                           |
|                                                               |
|  Zone "Keyboard"                                              |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_2016_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_2016_device =
{
    "Razer Blade (2016)",
    RAZER_BLADE_2016_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade (Late 2016)                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_late_2016_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_late_2016_device =
{
    "Razer Blade (Late 2016)",
    RAZER_BLADE_LATE_2016_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_late_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Advanced)                               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_advanced_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_advanced_device =
{
    "Razer Blade 15 (2018 Advanced)",
    RAZER_BLADE_2018_ADVANCED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2018_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_base_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_base_device =
{
    "Razer Blade 15 (2018 Base)",
    RAZER_BLADE_2018_BASE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2018_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2018 Mercury)                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2018_mercury_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2018_mercury_device =
{
    "Razer Blade 15 (2018 Mercury)",
    RAZER_BLADE_2018_MERCURY_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2018_mercury_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Advanced)                               |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_advanced_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_advanced_device =
{
    "Razer Blade 15 (2019 Advanced)",
    RAZER_BLADE_2019_ADVANCED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2019_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_base_zone =
{
    "Keyboard",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_15_2019_base_device =
{
    "Razer Blade 15 (2019 Base)",
    RAZER_BLADE_2019_BASE_PID,
    DEVICE_TYPE_KEYBOARD,
    false,
    1,
    1,
    {
        &blade_15_2019_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Mercury)                                |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_mercury_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_mercury_device =
{
    "Razer Blade 15 (2019 Mercury)",
    RAZER_BLADE_2019_MERCURY_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2019_mercury_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2019 Studio)                                 |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2019_studio_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2019_studio_device =
{
    "Razer Blade 15 (2019 Studio)",
    RAZER_BLADE_2019_STUDIO_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2019_studio_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2020 Advanced)                               |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2020_advanced_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2020_advanced_device =
{
    "Razer Blade 15 (2020 Advanced)",
    RAZER_BLADE_2020_ADVANCED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2020_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2020 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2020_base_zone =
{
    "Keyboard",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_15_2020_base_device =
{
    "Razer Blade 15 (2020 Base)",
    RAZER_BLADE_2020_BASE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    1,
    16,
    {
        &blade_15_2020_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade (Late 2020)                                      |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_late_2020_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_late_2020_device =
{
    "Razer Blade (Late 2020)",
    RAZER_BLADE_LATE_2020_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_late_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2021 Advanced)                               |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2021_advanced_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_15_2021_advanced_device =
{
    "Razer Blade 15 (2021 Advanced)",
    RAZER_BLADE_2021_ADVANCED_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_15_2021_advanced_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 15 (2021 Base)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Linear                                                  |
|       1 Row, 16 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone blade_15_2021_base_zone =
{
    "Keyboard",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device blade_15_2021_base_device =
{
    "Razer Blade 15 (2021 Base)",
    RAZER_BLADE_2021_BASE_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    1,
    16,
    {
        &blade_15_2021_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade 14 (2021)                                        |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_14_2021_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_14_2021_device =
{
    "Razer Blade 14 (2021)",
    RAZER_BLADE_14_2021_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_14_2021_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blade_14_2021_keymap,
    BLADE_14_2021_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Book 13 (2020)                                         |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone book_13_2020_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device book_13_2020_device =
{
    "Razer Book 13 (2020)",
    RAZER_BOOK_13_2020_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &book_13_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    book_13_2020_keymap,
    BOOK_13_2020_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2016)                                       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2016_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2016_device =
{
    "Razer Blade Pro (2016)",
    RAZER_BLADE_PRO_2016_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    25,
    {
        &blade_pro_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2017)                                       |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2017_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2017_device =
{
    "Razer Blade Pro (2017)",
    RAZER_BLADE_PRO_2017_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    25,
    {
        &blade_pro_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blade_pro_2017_keymap,
    BLADE_PRO_2017_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2017 FullHD)                                |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 25 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2017_fullhd_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    25
};

static const razer_device blade_pro_2017_fullhd_device =
{
    "Razer Blade Pro (2017 FullHD)",
    RAZER_BLADE_PRO_2017_FULLHD_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    25,
    {
        &blade_pro_2017_fullhd_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (2019)                                       |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_2019_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_2019_device =
{
    "Razer Blade Pro (2019)",
    RAZER_BLADE_PRO_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_pro_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro (Late 2019)                                  |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_late_2019_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_late_2019_device =
{
    "Razer Blade Pro (Late 2019)",
    RAZER_BLADE_PRO_LATE_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_pro_late_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro 17 (2020)                                    |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_17_2020_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_17_2020_device =
{
    "Razer Blade Pro 17 (2020)",
    RAZER_BLADE_PRO_17_2020_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_pro_17_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Pro 17 (2021)                                    |
|                                                               |
|   Zone "Keyboard"                                             |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_pro_17_2021_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_pro_17_2021_device =
{
    "Razer Blade Pro 17 (2021)",
    RAZER_BLADE_PRO_17_2021_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_pro_17_2021_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blade_17_pro_2021_keymap,
    BLADE_17_PRO_2021_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2016)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2016_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2016_device =
{
    "Razer Blade Stealth (2016)",
    RAZER_BLADE_STEALTH_2016_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_stealth_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    blade_stealth_2016_keymap,
    BLADE_STEALTH_2016_KEYMAP_SIZE
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2016)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2016_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_late_2016_device =
{
    "Razer Blade Stealth (Late 2016)",
    RAZER_BLADE_STEALTH_LATE_2016_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_stealth_late_2016_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2017)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2017_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2017_device =
{
    "Razer Blade Stealth (2017)",
    RAZER_BLADE_STEALTH_2017_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_stealth_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2017)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2017_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_late_2017_device =
{
    "Razer Blade Stealth (Late 2017)",
    RAZER_BLADE_STEALTH_LATE_2017_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_stealth_late_2017_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2019)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Matrix                                                  |
|       6 Rows, 16 Columns                                      |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2019_zone =
{
    "Keyboard",
    ZONE_TYPE_MATRIX,
    6,
    16
};

static const razer_device blade_stealth_2019_device =
{
    "Razer Blade Stealth (2019)",
    RAZER_BLADE_STEALTH_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    6,
    16,
    {
        &blade_stealth_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2019)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2019_zone =
{
    "Keyboard",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_stealth_late_2019_device =
{
    "Razer Blade Stealth (Late 2019)",
    RAZER_BLADE_STEALTH_LATE_2019_PID,
    DEVICE_TYPE_KEYBOARD,
    false,
    1,
    1,
    {
        &blade_stealth_late_2019_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (2020)                                   |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_2020_zone =
{
    "Keyboard",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_stealth_2020_device =
{
    "Razer Blade Stealth (2020)",
    RAZER_BLADE_STEALTH_2020_PID,
    DEVICE_TYPE_KEYBOARD,
    false,
    1,
    1,
    {
        &blade_stealth_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Blade Stealth (Late 2020)                              |
|                                                               |
|  Zone "Keyboard"                                              |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone blade_stealth_late_2020_zone =
{
    "Keyboard",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device blade_stealth_late_2020_device =
{
    "Razer Blade Stealth (Late 2020)",
    RAZER_BLADE_STEALTH_LATE_2020_PID,
    DEVICE_TYPE_KEYBOARD,
    false,
    1,
    1,
    {
        &blade_stealth_late_2020_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------------------*\
|  MICE                                                                     |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Abyssus Elite DVa Edition 1532:006A                    |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone abyssus_elite_dva_edition_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device abyssus_elite_dva_edition_device =
{
    "Razer Abyssus Elite DVa Edition",
    RAZER_ABYSSUS_ELITE_DVA_EDITION_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    1,
    {
        &abyssus_elite_dva_edition_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Abyssus Essential 1532:006B                            |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone abyssus_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device abyssus_essential_device =
{
    "Razer Abyssus Essential",
    RAZER_ABYSSUS_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    1,
    {
        &abyssus_essential_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk 1532:0064                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_device =
{
    "Razer Basilisk",
    RAZER_BASILISK_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &basilisk_logo_zone,
        &basilisk_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Essential                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_essential_device =
{
    "Razer Basilisk Essential",
    RAZER_BASILISK_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    1,
    {
        &basilisk_essential_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Ultimate (Wired) 1532:0086                    |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left LED Strip"                                        |
|       Linear                                                  |
|       8 LED                                                   |
|                                                               |
|  Zone "Right LED Strip"                                       |
|       Linear                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_ultimate_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_zone basilisk_ultimate_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone basilisk_ultimate_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_ultimate_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_ultimate_wired_device =
{
    "Razer Basilisk Ultimate",
    RAZER_BASILISK_ULTIMATE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    14,
    {
        &basilisk_ultimate_wired_scroll_wheel_zone,
        &basilisk_ultimate_wired_logo_zone,
        &basilisk_ultimate_wired_left_zone,
        &basilisk_ultimate_wired_right_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk Ultimate (Wireless) 1532:0088                 |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left LED Strip"                                        |
|       Linear                                                  |
|       8 LED                                                   |
|                                                               |
|  Zone "Right LED Strip"                                       |
|       Linear                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_ultimate_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_zone basilisk_ultimate_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone basilisk_ultimate_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_ultimate_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_ultimate_wireless_device =
{
    "Razer Basilisk Ultimate (Wireless)",
    RAZER_BASILISK_ULTIMATE_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    14,
    {
        &basilisk_ultimate_wireless_scroll_wheel_zone,
        &basilisk_ultimate_wireless_logo_zone,
        &basilisk_ultimate_wireless_left_zone,
        &basilisk_ultimate_wireless_right_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V2 1532:0085                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device basilisk_v2_device =
{
    "Razer Basilisk V2",
    RAZER_BASILISK_V2_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &basilisk_v2_scroll_wheel_zone,
        &basilisk_v2_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Basilisk V3 1532:0099                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       9 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone basilisk_v3_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone basilisk_v3_ledstrip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device basilisk_v3_device =
{
    "Razer Basilisk V3",
    RAZER_BASILISK_V3_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    11,
    {
        &basilisk_v3_logo_zone,
        &basilisk_v3_scroll_wheel_zone,
        &basilisk_v3_ledstrip_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder Chroma                                      |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_chroma_device =
{
    "Razer DeathAdder Chroma",
    RAZER_DEATHADDER_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &deathadder_chroma_logo_zone,
        &deathadder_chroma_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Elite                                       |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_elite_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_elite_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_elite_device =
{
    "Razer DeathAdder Elite",
    RAZER_DEATHADDER_ELITE_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &deathadder_elite_logo_zone,
        &deathadder_elite_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Essential 1532:006E                         |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_essential_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_essential_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_essential_device =
{
    "Razer DeathAdder Essential",
    RAZER_DEATHADDER_ESSENTIAL_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &deathadder_essential_logo_zone,
        &deathadder_essential_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Deathadder Essential White Edition 1532:0071           |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_essential_white_edition_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_essential_white_edition_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_essential_white_edition_device =
{
    "Razer DeathAdder Essential (White Edition)",
    RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &deathadder_essential_white_edition_logo_zone,
        &deathadder_essential_white_edition_scroll_wheel_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 1532:0084                                |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone deathadder_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_device =
{
    "Razer DeathAdder V2",
    RAZER_DEATHADDER_V2_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &deathadder_v2_scroll_wheel_zone,
        &deathadder_v2_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 Pro (Wired) 1532:007C	                |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_pro_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_pro_wired_device =
{
    "Razer DeathAdder V2 (Wired)",
    RAZER_DEATHADDER_V2_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    1,
    {
        &deathadder_v2_pro_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer DeathAdder V2 Pro (Wireless) 1532:007D                 |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone deathadder_v2_pro_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device deathadder_v2_pro_wireless_device =
{
    "Razer DeathAdder V2 (Wireless)",
    RAZER_DEATHADDER_V2_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    1,
    {
        &deathadder_v2_pro_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Diamondback Chroma                                     |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       19 LEDs                                                 |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone diamondback_chroma_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    19
};

static const razer_zone diamondback_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone diamondback_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device diamondback_chroma_device =
{
    "Razer Diamondback Chroma",
    RAZER_DIAMONDBACK_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    21,
    {
        &diamondback_chroma_led_strip_zone,
        &diamondback_chroma_logo_zone,
        &diamondback_chroma_scroll_wheel_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2017 (Wired)                                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2017_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2017_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2017_wired_device =
{
    "Razer Lancehead 2017 (Wired)",
    RAZER_LANCEHEAD_2017_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &lancehead_2017_wired_right_zone,
        &lancehead_2017_wired_left_zone,
        &lancehead_2017_wired_logo_zone,
        &lancehead_2017_wired_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2017 (Wireless)                              |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2017_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2017_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2017_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2017_wireless_device =
{
    "Razer Lancehead 2017 (Wireless)",
    RAZER_LANCEHEAD_2017_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &lancehead_2017_wireless_right_zone,
        &lancehead_2017_wireless_left_zone,
        &lancehead_2017_wireless_logo_zone,
        &lancehead_2017_wireless_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2019 (Wired)                                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2019_wired_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wired_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wired_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2019_wired_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2019_wired_device =
{
    "Razer Lancehead 2019 (Wired)",
    RAZER_LANCEHEAD_2019_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &lancehead_2019_wired_right_zone,
        &lancehead_2019_wired_left_zone,
        &lancehead_2019_wired_logo_zone,
        &lancehead_2019_wired_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Lancehead 2019 (Wireless)                              |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_2019_wireless_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wireless_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_2019_wireless_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_2019_wireless_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_2019_wireless_device =
{
    "Razer Lancehead 2019 (Wireless)",
    RAZER_LANCEHEAD_2019_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &lancehead_2019_wireless_right_zone,
        &lancehead_2019_wireless_left_zone,
        &lancehead_2019_wireless_logo_zone,
        &lancehead_2019_wireless_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Lancehead Tournament Edition 1532:0060                 |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone lancehead_te_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_te_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone lancehead_te_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone lancehead_te_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device lancehead_te_device =
{
    "Razer Lancehead Tournament Edition",
    RAZER_LANCEHEAD_TE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &lancehead_te_scroll_wheel_zone,
        &lancehead_te_logo_zone,
        &lancehead_te_right_zone,
        &lancehead_te_left_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2012 (Wired)                                     |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2012_wired_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_LINEAR,
    1,
    1
};

static const razer_device mamba_2012_wired_device =
{
    "Razer Mamba 2012 (Wired)",
    RAZER_MAMBA_2012_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    15,
    {
        &mamba_2012_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2012 (Wireless)                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2012_wireless_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_LINEAR,
    1,
    1
};

static const razer_device mamba_2012_wireless_device =
{
    "Razer Mamba 2012 (Wireless)",
    RAZER_MAMBA_2012_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    15,
    {
        &mamba_2012_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2015 (Wired)                                     |
|                                                               |
|  Zone "Chroma Zone"                                           |
|       Single                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2015_wired_zone =
{
    "Chroma Zone",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mamba_2015_wired_device =
{
    "Razer Mamba 2015 (Wired)",
    RAZER_MAMBA_2015_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    15,
    {
        &mamba_2015_wired_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2015 (Wireless)                                  |
|                                                               |
|  Zone "Chroma Zone"                                           |
|       Single                                                  |
|       15 LED                                                  |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2015_wireless_zone =
{
    "Chroma Zone",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mamba_2015_wireless_device =
{
    "Razer Mamba (Wireless)",
    RAZER_MAMBA_2015_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    15,
    {
        &mamba_2015_wireless_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba 2018 (Wired)                                     |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_2018_wired_logo_zone =
{
    "Logo Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_2018_wired_scroll_wheel_zone =
{
    "Scroll Wheel Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_2018_wired_device =
{
    "Razer Mamba 2018 (Wired)",
    RAZER_MAMBA_2018_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    2,
    {
        &mamba_2018_wired_scroll_wheel_zone,
        &mamba_2018_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba Wireless (2018) Wireless 1532:0072               |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/

static const razer_zone mamba_2018_wireless_logo_zone =
{
    "Logo Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_2018_wireless_scroll_wheel_zone =
{
    "Scroll Wheel Zone",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_2018_wireless_device =
{
    "Razer Mamba 2018 (Wireless)",
    RAZER_MAMBA_2018_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    2,
    {
        &mamba_2018_wireless_scroll_wheel_zone,
        &mamba_2018_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba Elite                                            |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       9 LEDs                                                  |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       9 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone mamba_elite_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_elite_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_elite_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_zone mamba_elite_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    9
};

static const razer_device mamba_elite_device =
{
    "Razer Mamba Elite",
    RAZER_MAMBA_ELITE_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    20,
    {
        &mamba_elite_scroll_wheel_zone,
        &mamba_elite_logo_zone,
        &mamba_elite_left_zone,
        &mamba_elite_right_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mamba Tournament Edition                               |
|                                                               |
|  Zone "Left"                                                  |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Right"                                                 |
|       Linear                                                  |
|       7 LEDs                                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mamba_te_left_zone =
{
    "Left LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone mamba_te_right_zone =
{
    "Right LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    7
};

static const razer_zone mamba_te_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone mamba_te_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mamba_te_device =
{
    "Razer Mamba Tournament Edition",
    RAZER_MAMBA_TE_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    16,
    {
        &mamba_te_left_zone,
        &mamba_te_right_zone,
        &mamba_te_logo_zone,
        &mamba_te_scroll_wheel_zone,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Naga Chroma                                            |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_chroma_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_chroma_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_chroma_device =
{
    "Razer Naga Chroma",
    RAZER_NAGA_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_chroma_logo_zone,
        &naga_chroma_scroll_wheel_zone,
        &naga_chroma_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};


/*-------------------------------------------------------------*\
|  Razer Naga Hex V2 1532:0050                                  |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_hex_v2_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_hex_v2_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_hex_v2_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_hex_v2_device =
{
    "Razer Naga Hex V2",
    RAZER_NAGA_HEX_V2_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_hex_v2_logo_zone,
        &naga_hex_v2_scroll_wheel_zone,
        &naga_hex_v2_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Naga Left Handed 1532:008D                             |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_left_handed_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_left_handed_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_left_handed_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_left_handed_device =
{
    "Razer Naga Left Handed",
    RAZER_NAGA_LEFT_HANDED_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_left_handed_logo_zone,
        &naga_left_handed_scroll_wheel_zone,
        &naga_left_handed_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Naga Trinity 1532:0067                                  |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_trinity_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_trinity_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_trinity_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_trinity_device =
{
    "Razer Naga Trinity",
    RAZER_NAGA_TRINITY_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_trinity_scroll_wheel_zone,
        &naga_trinity_logo_zone,
        &naga_trinity_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Naga Pro 1532:008F (wired) 1532:0090 (wireless)        |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_pro_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_pro_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_pro_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_pro_wired_device =
{
    "Razer Naga Pro (Wired)",
    RAZER_NAGA_PRO_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_pro_scroll_wheel_zone,
        &naga_pro_logo_zone,
        &naga_pro_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

static const razer_device naga_pro_wireless_device =
{
    "Razer Naga Pro (Wireless)",
    RAZER_NAGA_PRO_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    3,
    {
        &naga_pro_scroll_wheel_zone,
        &naga_pro_logo_zone,
        &naga_pro_numpad_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Viper 8kHz 1532:0091                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_8khz_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_8khz_device =
{
    "Razer Viper 8kHz",
    RAZER_VIPER_8KHZ_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    1,
    {
        &viper_8khz_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Viper Mini 1532:008A                                   |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_mini_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L27
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_mini_device =
{
    "Razer Viper Mini",
    RAZER_VIPER_MINI_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    1,
    {
        &viper_mini_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Viper Ultimate Wired 1532:007A                         |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_ultimate_wired_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L1690
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_ultimate_wired_device =
{
    "Razer Viper Ultimate (Wired)",
    RAZER_VIPER_ULTIMATE_WIRED_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    1,
    {
        &viper_ultimate_wired_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Viper Ultimate Wireless 1532:007B                      |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_ultimate_wireless_logo_zone =
{
    "Logo",      //Matrix of one as per https://github.com/openrazer/openrazer/blob/master/daemon/openrazer_daemon/hardware/mouse.py#L1690
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_ultimate_wireless_device =
{
    "Razer Viper Ultimate (Wireless)",
    RAZER_VIPER_ULTIMATE_WIRELESS_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    1,
    {
        &viper_ultimate_wireless_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Viper 1532:0078                                        |
|                                                               |
|  Zone "Logo"                                                  |
|       Matrix                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone viper_logo_zone =
{
    "Logo",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device viper_device =
{
    "Razer Viper",
    RAZER_VIPER_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    1,
    {
        &viper_logo_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Naga Epic Chroma                                       |
|                                                               |
|  Zone "Scroll Wheel"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Numpad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone naga_epic_chroma_scroll_wheel_zone =
{
    "Scroll Wheel",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone naga_epic_chroma_numpad_zone =
{
    "Numpad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device naga_epic_chroma_device =
{
    "Razer Naga Epic Chroma",
    RAZER_NAGA_EPIC_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    false,
    1,
    2,
    {
        &naga_epic_chroma_scroll_wheel_zone,
        &naga_epic_chroma_numpad_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------------------*\
|  KEYPADS                                                                  |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Orbweaver Chroma                                       |
|                                                               |
|  Zone "Keypad"                                                |
|       Matrix                                                  |
|       4 Rows, 5 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone orbweaver_chroma_zone =
{
    "Keypad",
    ZONE_TYPE_MATRIX,
    4,
    5
};

static const razer_device orbweaver_chroma_device =
{
    "Razer Orbweaver Chroma",
    RAZER_ORBWEAVER_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    4,
    5,
    {
        &orbweaver_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Tartarus Chroma                                        |
|                                                               |
|  Zone "Keypad"                                                |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_chroma_zone =
{
    "Keypad",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device tartarus_chroma_device =
{
    "Razer Tartarus Chroma",
    RAZER_TARTARUS_CHROMA_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    1,
    1,
    {
        &tartarus_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
| Razer Tartarus V2 1532:0208                                   |
|                                                               |
|  Zone "Keypad"                                                |
|       Matrix                                                  |
|       4 Rows, 6 Columns                                       |
\*-------------------------------------------------------------*/
static const razer_zone tartarus_v2_zone =
{
    "Keypad",
    ZONE_TYPE_MATRIX,
    4,
    6
};

static const razer_device tartarus_v2_device =
{
    "Razer Tartarus V2",
    RAZER_TARTARUS_V2_PID,
    DEVICE_TYPE_KEYBOARD,
    true,
    4,
    6,
    {
        &tartarus_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    tartarus_v2_keymap,
    TARTARUS_V2_KEYMAP_SIZE
};

/*-------------------------------------------------------------------------*\
|  MOUSEMATS                                                                |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Firefly                                                |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone firefly_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device firefly_device =
{
    "Razer Firefly",
    RAZER_FIREFLY_PID,
    DEVICE_TYPE_MOUSEMAT,
    true,
    1,
    15,
    {
        &firefly_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Firefly Hyperflux                                      |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       1 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone firefly_hyperflux_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device firefly_hyperflux_device =
{
    "Razer Firefly Hyperflux",
    RAZER_FIREFLY_HYPERFLUX_PID,
    DEVICE_TYPE_MOUSEMAT,
    true,
    1,
    1,
    {
        &firefly_hyperflux_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Firefly V2                                             |
|                                                               |
|  Zone "LED Strip"                                             |
|       Matrix                                                  |
|       19 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone firefly_v2_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    19
};

static const razer_device firefly_v2_device =
{
    "Razer Firefly V2",
    RAZER_FIREFLY_V2_PID,
    DEVICE_TYPE_MOUSEMAT,
    true,
    1,
    19,
    {
        &firefly_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Goliathus                                              |
|                                                               |
|  Zone "LED Strip"                                             |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device goliathus_device =
{
    "Razer Goliathus",
    RAZER_GOLIATHUS_CHROMA_PID,
    DEVICE_TYPE_MOUSEMAT,
    true,
    1,
    1,
    {
        &goliathus_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Goliathus Extended                                     |
|                                                               |
|  Zone "LED Strip"                                             |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone goliathus_extended_zone =
{
    "LED Strip",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device goliathus_extended_device =
{
    "Razer Goliathus Extended",
    RAZER_GOLIATHUS_CHROMA_EXTENDED_PID,
    DEVICE_TYPE_MOUSEMAT,
    true,
    1,
    1,
    {
        &goliathus_extended_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------------------*\
|  HEADSETS                                                                 |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Kraken 7.1 Chroma                                      |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_chroma_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_chroma_device =
{
    "Razer Kraken 7.1 Chroma",
    RAZER_KRAKEN_PID,
    DEVICE_TYPE_HEADSET,
    true,
    1,
    1,
    {
        &kraken_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Kraken 7.1 V2                                          |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_v2_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_v2_device =
{
    "Razer Kraken 7.1 V2",
    RAZER_KRAKEN_V2_PID,
    DEVICE_TYPE_HEADSET,
    true,
    1,
    1,
    {
        &kraken_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Kraken Ultimate 1532:0527                              |
|                                                               |
|  Zone "Headset"                                               |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_ultimate_zone =
{
    "Headset",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device kraken_ultimate_device =
{
    "Razer Kraken Ultimate",
    RAZER_KRAKEN_ULTIMATE_PID,
    DEVICE_TYPE_HEADSET,
    true,
    1,
    1,
    {
        &kraken_ultimate_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Kraken Kitty Edition 1532:0F19                         |
|                                                               |
|  Zone "Headset"                                               |
|       Matrix                                                  |
|       4 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone kraken_kitty_zone =
{
    "Headset",
    ZONE_TYPE_LINEAR,
    1,
    4
};

static const razer_device kraken_kitty_device =
{
    "Razer Kraken Kitty Edition",
    RAZER_KRAKEN_KITTY_EDITION_PID,
    DEVICE_TYPE_HEADSET,
    true,
    1,
    4,
    {
        &kraken_kitty_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Tiamat 7.1 V2                                          |
|                                                               |
|  Zone "Controller"                                            |
|       Linear                                                  |
|       15 LEDs                                                 |
|                                                               |
|  Zone "Headset Left"                                          |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "Headset Right"                                         |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone tiamat_71_v2_controller_zone =
{
    "Controller",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_zone tiamat_71_v2_headset_left_zone =
{
    "Headset Left",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone tiamat_71_v2_headset_right_zone =
{
    "Headset Right",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device tiamat_71_v2_device =
{
    "Razer Tiamat 7.1 V2",
    RAZER_TIAMAT_71_V2_PID,
    DEVICE_TYPE_HEADSET,
    true,
    1,
    17,
    {
        &tiamat_71_v2_controller_zone,
        &tiamat_71_v2_headset_left_zone,
        &tiamat_71_v2_headset_right_zone,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------------------*\
|  OTHER                                                                    |
\*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------*\
|  Razer Core                                                   |
|                                                               |
|  Zone "Side Window Lights"                                    |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone core_side_zone =
{
    "Side Window Lights",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone core_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device core_device =
{
    "Razer Core",
    RAZER_CORE_PID,
    DEVICE_TYPE_UNKNOWN,
    true,
    1,
    9,
    {
        &core_side_zone,
        &core_led_strip_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Core X                                                 |
|                                                               |
|  Zone "Side Window Lights"                                    |
|       Single                                                  |
|       1 LED                                                   |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone core_x_side_zone =
{
    "Side Window Lights",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_zone core_x_led_strip_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device core_x_device =
{
    "Razer Core X",
    RAZER_CORE_X_PID,
    DEVICE_TYPE_UNKNOWN,
    true,
    1,
    16,
    {
        &core_x_side_zone,
        &core_x_led_strip_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Chroma Mug Holder                                      |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mug_holder_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device mug_holder_device =
{
    "Razer Chroma Mug Holder",
    RAZER_CHROMA_MUG_PID,
    DEVICE_TYPE_UNKNOWN,
    true,
    1,
    15,
    {
        &mug_holder_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Chroma Addressable RGB Controller                      |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       80 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chromaargb_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_3 =
{
    "Channel 3",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_4 =
{
    "Channel 4",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_5 =
{
    "Channel 5",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_zone chromaargb_zone_6 =
{
    "Channel 6",
    ZONE_TYPE_LINEAR,
    1,
    80
};

static const razer_device chromaargb_device =
{
    "Razer Chroma Addressable RGB Controller",
    RAZER_CHROMA_ADDRESSABLE_RGB_CONTROLLER_PID,
    DEVICE_TYPE_LEDSTRIP,
    true,
    6,
    80,
    {
        &chromaargb_zone_1,
        &chromaargb_zone_2,
        &chromaargb_zone_3,
        &chromaargb_zone_4,
        &chromaargb_zone_5,
        &chromaargb_zone_6
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Chroma HDK                                             |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chromahdk_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_3 =
{
    "Channel 3",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chromahdk_zone_4 =
{
    "Channel 4",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device chromahdk_device =
{
    "Razer Chroma HDK",
    RAZER_CHROMA_HDK_PID,
    DEVICE_TYPE_LEDSTRIP,
    true,
    4,
    16,
    {
        &chromahdk_zone_1,
        &chromahdk_zone_2,
        &chromahdk_zone_3,
        &chromahdk_zone_4,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Chroma PC Case Lighting Kit                            |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       16 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone chroma_pc_case_lighting_kit_zone_1 =
{
    "Channel 1",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_zone chroma_pc_case_lighting_kit_zone_2 =
{
    "Channel 2",
    ZONE_TYPE_LINEAR,
    1,
    16
};

static const razer_device chroma_pc_case_lighting_kit_device =
{
    "Razer Chroma PC Case Lighting Kit",
    RAZER_CHROMA_PC_CASE_LIGHTING_KIT_PID,
    DEVICE_TYPE_LEDSTRIP,
    true,
    2,
    16,
    {
        &chroma_pc_case_lighting_kit_zone_1,
        &chroma_pc_case_lighting_kit_zone_2,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Base Station Chroma                                    |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       15 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone base_station_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    15
};

static const razer_device base_station_device =
{
    "Razer Base Station Chroma",
    RAZER_BASE_STATION_CHROMA_PID,
    DEVICE_TYPE_HEADSET_STAND,
    true,
    1,
    15,
    {
        &base_station_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};


/*-------------------------------------------------------------*\
|  Razer Mouse Bungee V3 Chroma                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                 |
\*-------------------------------------------------------------*/
static const razer_zone mouse_bungee_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device mouse_bungee_device =
{
    "Razer Mouse Bungee V3 Chroma",
    RAZER_MOUSE_BUNGEE_V3_CHROMA_PID,
    DEVICE_TYPE_MOUSE,
    true,
    1,
    8,
    {
        &mouse_bungee_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Base Station V2 Chroma                                 |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       8 LEDs                                                  |
\*-------------------------------------------------------------*/
static const razer_zone base_station_v2_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device base_station_v2_device =
{
    "Razer Base Station V2 Chroma",
    RAZER_BASE_STATION_V2_CHROMA_PID,
    DEVICE_TYPE_HEADSET_STAND,
    true,
    1,
    8,
    {
        &base_station_v2_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Mouse Dock Chroma 1532:007E                            |
|                                                               |
|  Zone "Base"                                                  |
|       Single                                                  |
|       1 LED                                                   |
\*-------------------------------------------------------------*/
static const razer_zone mouse_dock_chroma_base_zone =
{
    "Base",
    ZONE_TYPE_SINGLE,
    1,
    1
};

static const razer_device mouse_dock_chroma_device =
{
    "Razer Mouse Dock Chroma",
    RAZER_MOUSE_DOCK_CHROMA_PID,
    DEVICE_TYPE_LIGHT,
    true,
    1,
    1,
    {
        &mouse_dock_chroma_base_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Nommo Pro                                              |
|                                                               |
|  Zone "Left Speaker"                                          |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
|  Zone "Right Speaker"                                         |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone nommo_pro_left_zone =
{
    "Left Speaker",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_zone nommo_pro_right_zone =
{
    "Right Speaker",
    ZONE_TYPE_LINEAR,
    1,
    8
};

static const razer_device nommo_pro_device =
{
    "Razer Nommo Pro",
    RAZER_NOMMO_PRO_PID,
    DEVICE_TYPE_SPEAKER,
    true,
    2,
    8,
    {
        &nommo_pro_left_zone,
        &nommo_pro_right_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Nommo Chroma                                           |
|                                                               |
|  Zone "Right Speaker"                                         |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
|  Zone "Left Speaker"                                          |
|       Linear                                                  |
|       8 LEDs                                                  |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone nommo_chroma_right_zone =
{
    "Right Speaker",
    ZONE_TYPE_LINEAR,
    1,
    24
};

static const razer_zone nommo_chroma_left_zone =
{
    "Left Speaker",
    ZONE_TYPE_LINEAR,
    1,
    24
};

static const razer_device nommo_chroma_device =
{
    "Razer Nommo Chroma",
    RAZER_NOMMO_CHROMA_PID,
    DEVICE_TYPE_SPEAKER,
    true,
    2,
    24,
    {
        &nommo_chroma_right_zone,
        &nommo_chroma_left_zone,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Charging Pad Chroma                                    |
|                                                               |
|  Zone "LED Strip"                                             |
|       Linear                                                  |
|       10 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone charging_pad_chroma_zone =
{
    "LED Strip",
    ZONE_TYPE_LINEAR,
    1,
    10
};

static const razer_device charging_pad_chroma_device =
{
    "Razer Charging Pad Chroma",
    RAZER_CHARGING_PAD_CHROMA_PID,
    DEVICE_TYPE_UNKNOWN,
    true,
    1,
    10,
    {
        &charging_pad_chroma_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  O11 Dynamic - Razer Edition 1532:0F13                        |
|                                                               |
|  Zone "Case LEDs"                                             |
|       Matrix                                                  |
|       64 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone o11_dynamic_case_zone =
{
    "Case LEDs",
    ZONE_TYPE_LINEAR,
    4,
    16
};

static const razer_device o11_dynamic_device =
{
    "Lian Li O11 Dynamic - Razer Edition",
    RAZER_O11_DYNAMIC_PID,
    DEVICE_TYPE_LEDSTRIP,
    true,
    4,
    16,
    {
        &o11_dynamic_case_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------*\
|  Razer Seiren Emote 1532:0F1B                                 |
|                                                               |
|  Zone "8-Bit LED Matrix"                                      |
|       Matrix                                                  |
|       64 LEDs                                                 |
|                                                               |
\*-------------------------------------------------------------*/
static const razer_zone seiren_emote_zone =
{
    "8-Bit LED Matrix",
    ZONE_TYPE_MATRIX,
    8,
    8
};

static const razer_device seiren_emote_device =
{
    "Razer Seiren Emote",
    RAZER_SEIREN_EMOTE_PID,
    DEVICE_TYPE_UNKNOWN,
    true,
    4,
    16,
    {
        &seiren_emote_zone,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL
    },
    NULL,
    0
};

/*-------------------------------------------------------------------------*\
|  DEVICE MASTER LIST                                                       |
\*-------------------------------------------------------------------------*/
#define RAZER_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ]))

static const razer_device* device_list[] =
{
/*-----------------------------------------------------------------*\
|  KEYBOARDS                                                        |
\*-----------------------------------------------------------------*/
    &blackwidow_2019_device,
    &blackwidow_chroma_device,
    &blackwidow_chroma_overwatch_device,
    &blackwidow_chroma_te_device,
    &blackwidow_chroma_v2_device,
    &blackwidow_elite_device,
    &blackwidow_v3_device,
    &blackwidow_v3_pro_wired_device,
    &blackwidow_v3_pro_wireless_device,
    &blackwidow_v3_pro_bluetooth_device,
    &blackwidow_v3_tkl_device,
    &blackwidow_v3_mini_wired_device,
    &blackwidow_v3_mini_wireless_device,
    &blackwidow_x_chroma_device,
    &blackwidow_x_chroma_te_device,
    &cynosa_chroma_device,
    &cynosa_v2_device,
    &cynosa_lite_device,
    &deathstalker_chroma_device,
    &huntsman_device,
    &huntsman_elite_device,
    &huntsman_mini_device,
    &huntsman_te_device,
    &huntsman_v2_analog_device,
    &huntsman_v2_tkl_device,
    &ornata_chroma_device,
/*-----------------------------------------------------------------*\
|  LAPTOPS                                                          |
\*-----------------------------------------------------------------*/
    &blade_2016_device,
    &blade_late_2016_device,
    &blade_15_2018_advanced_device,
    &blade_15_2018_base_device,
    &blade_15_2018_mercury_device,
    &blade_15_2019_advanced_device,
    &blade_15_2019_base_device,
    &blade_15_2019_mercury_device,
    &blade_15_2019_studio_device,
    &blade_15_2020_advanced_device,
    &blade_15_2020_base_device,
    &blade_late_2020_device,
    &blade_15_2021_advanced_device,
    &blade_15_2021_base_device,
    &blade_14_2021_device,
    &book_13_2020_device,
    &blade_pro_2016_device,
    &blade_pro_2017_device,
    &blade_pro_2017_fullhd_device,
    &blade_pro_2019_device,
    &blade_pro_late_2019_device,
    &blade_pro_17_2020_device,
    &blade_pro_17_2021_device,
    &blade_stealth_2019_device,
    &blade_stealth_2016_device,
    &blade_stealth_late_2016_device,
    &blade_stealth_2017_device,
    &blade_stealth_late_2017_device,
    &blade_stealth_2019_device,
    &blade_stealth_late_2019_device,
    &blade_stealth_2020_device,
    &blade_stealth_late_2020_device,
/*-----------------------------------------------------------------*\
|  MICE                                                             |
\*-----------------------------------------------------------------*/
    &abyssus_elite_dva_edition_device,
    &abyssus_essential_device,
    &basilisk_device,
    &basilisk_essential_device,
    &basilisk_ultimate_wired_device,
    &basilisk_ultimate_wireless_device,
    &basilisk_v2_device,
    &basilisk_v3_device,
    &deathadder_chroma_device,
    &deathadder_elite_device,
    &deathadder_essential_device,
    &deathadder_essential_white_edition_device,
    &deathadder_v2_device,
    &deathadder_v2_pro_wired_device,
    &deathadder_v2_pro_wireless_device,
    &diamondback_chroma_device,
    &lancehead_2017_wired_device,
    &lancehead_2017_wireless_device,
    &lancehead_2019_wired_device,
    &lancehead_2019_wireless_device,
    &lancehead_te_device,
    &mamba_2012_wired_device,
    &mamba_2012_wireless_device,
    &mamba_2015_wired_device,
    &mamba_2015_wireless_device,
    &mamba_2018_wired_device,
    &mamba_2018_wireless_device,
    &mamba_te_device,
    &mamba_elite_device,
    &naga_chroma_device,
    &naga_epic_chroma_device,
    &naga_hex_v2_device,
    &naga_left_handed_device,
    &naga_trinity_device,
    &naga_pro_wired_device,
    &naga_pro_wireless_device,
    &viper_8khz_device,
    &viper_mini_device,
    &viper_ultimate_wired_device,
    &viper_ultimate_wireless_device,
    &viper_device,
/*-----------------------------------------------------------------*\
|  KEYPADS                                                          |
\*-----------------------------------------------------------------*/
    &orbweaver_chroma_device,
    &tartarus_chroma_device,
    &tartarus_v2_device,
/*-----------------------------------------------------------------*\
|  MOUSEMATS                                                        |
\*-----------------------------------------------------------------*/
    &firefly_device,
    &firefly_hyperflux_device,
    &firefly_v2_device,
    &goliathus_device,
    &goliathus_extended_device,
/*-----------------------------------------------------------------*\
|  HEADSETS                                                         |
\*-----------------------------------------------------------------*/
    &kraken_chroma_device,
    &kraken_v2_device,
    &kraken_ultimate_device,
    &kraken_kitty_device,
    &tiamat_71_v2_device,
/*-----------------------------------------------------------------*\
|  OTHER                                                            |
\*-----------------------------------------------------------------*/
    &base_station_device,
    &base_station_v2_device,
    &mouse_bungee_device,
    &charging_pad_chroma_device,
    &chromaargb_device,
    &chromahdk_device,
    &chroma_pc_case_lighting_kit_device,
    &core_device,
    &core_x_device,
    &mug_holder_device,
    &mouse_dock_chroma_device,
    &nommo_chroma_device,
    &nommo_pro_device,
    &o11_dynamic_device,
    &seiren_emote_device,
};
