// ReSharper disable InconsistentNaming

using System;
using System.Collections.Generic;

namespace RGB.NET.Devices.CoolerMaster
{
    /// <summary>
    /// Contains all the hardware-id mappings for CoolerMaster devices.
    /// </summary>
    internal static class CoolerMasterKeyboardLedMappings
    {
        #region Properties & Fields

        #region MasterKeysL

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysL_US = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },
            { CoolerMasterLedIds.Snapshot, new Tuple<int, int>(0,15) },
            { CoolerMasterLedIds.ScrollLock, new Tuple<int, int>(0,16) },
            { CoolerMasterLedIds.Pause, new Tuple<int, int>(0,17) },
            { CoolerMasterLedIds.P1, new Tuple<int, int>(0,18) },
            { CoolerMasterLedIds.P2, new Tuple<int, int>(0,19) },
            { CoolerMasterLedIds.P3, new Tuple<int, int>(0,20) },
            { CoolerMasterLedIds.P4, new Tuple<int, int>(0,21) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Insert, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.Home, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.PageUp, new Tuple<int, int>(1,17) },
            { CoolerMasterLedIds.Numlock, new Tuple<int, int>(1,18) },
            { CoolerMasterLedIds.KeypadSlash, new Tuple<int, int>(1,19) },
            { CoolerMasterLedIds.KeypadAsterisk, new Tuple<int, int>(1,20) },
            { CoolerMasterLedIds.KeypadMinus, new Tuple<int, int>(1,21) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Backslash, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Delete, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.End, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.PageDown, new Tuple<int, int>(2,17) },
            { CoolerMasterLedIds.Keypad7, new Tuple<int, int>(2,18) },
            { CoolerMasterLedIds.Keypad8, new Tuple<int, int>(2,19) },
            { CoolerMasterLedIds.Keypad9, new Tuple<int, int>(2,20) },
            { CoolerMasterLedIds.KeypadPlus, new Tuple<int, int>(2,21) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.Enter, new Tuple<int, int>(3,14) },
            { CoolerMasterLedIds.Keypad4, new Tuple<int, int>(3,18) },
            { CoolerMasterLedIds.Keypad5, new Tuple<int, int>(3,19) },
            { CoolerMasterLedIds.Keypad6, new Tuple<int, int>(3,20) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.Up, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad1, new Tuple<int, int>(4,18) },
            { CoolerMasterLedIds.Keypad2, new Tuple<int, int>(4,19) },
            { CoolerMasterLedIds.Keypad3, new Tuple<int, int>(4,20) },
            { CoolerMasterLedIds.KeypadEnter, new Tuple<int, int>(4,21) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Left, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Down, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.Right, new Tuple<int, int>(5,17) },
            { CoolerMasterLedIds.Keypad0, new Tuple<int, int>(5,18) },
            { CoolerMasterLedIds.KeypadPeriod, new Tuple<int, int>(5,20) }
        };

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysL_EU = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },
            { CoolerMasterLedIds.Snapshot, new Tuple<int, int>(0,15) },
            { CoolerMasterLedIds.ScrollLock, new Tuple<int, int>(0,16) },
            { CoolerMasterLedIds.Pause, new Tuple<int, int>(0,17) },
            { CoolerMasterLedIds.P1, new Tuple<int, int>(0,18) },
            { CoolerMasterLedIds.P2, new Tuple<int, int>(0,19) },
            { CoolerMasterLedIds.P3, new Tuple<int, int>(0,20) },
            { CoolerMasterLedIds.P4, new Tuple<int, int>(0,21) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Insert, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.Home, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.PageUp, new Tuple<int, int>(1,17) },
            { CoolerMasterLedIds.Numlock, new Tuple<int, int>(1,18) },
            { CoolerMasterLedIds.KeypadSlash, new Tuple<int, int>(1,19) },
            { CoolerMasterLedIds.KeypadAsterisk, new Tuple<int, int>(1,20) },
            { CoolerMasterLedIds.KeypadMinus, new Tuple<int, int>(1,21) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Enter, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Delete, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.End, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.PageDown, new Tuple<int, int>(2,17) },
            { CoolerMasterLedIds.Keypad7, new Tuple<int, int>(2,18) },
            { CoolerMasterLedIds.Keypad8, new Tuple<int, int>(2,19) },
            { CoolerMasterLedIds.Keypad9, new Tuple<int, int>(2,20) },
            { CoolerMasterLedIds.KeypadPlus, new Tuple<int, int>(2,21) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.CODEA2, new Tuple<int, int>(3,12) },
            { CoolerMasterLedIds.Keypad4, new Tuple<int, int>(3,18) },
            { CoolerMasterLedIds.Keypad5, new Tuple<int, int>(3,19) },
            { CoolerMasterLedIds.Keypad6, new Tuple<int, int>(3,20) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.CODEA5, new Tuple<int, int>(4,1) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.Up, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad1, new Tuple<int, int>(4,18) },
            { CoolerMasterLedIds.Keypad2, new Tuple<int, int>(4,19) },
            { CoolerMasterLedIds.Keypad3, new Tuple<int, int>(4,20) },
            { CoolerMasterLedIds.KeypadEnter, new Tuple<int, int>(4,21) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Left, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Down, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.Right, new Tuple<int, int>(5,17) },
            { CoolerMasterLedIds.Keypad0, new Tuple<int, int>(5,18) },
            { CoolerMasterLedIds.KeypadPeriod, new Tuple<int, int>(5,20) }
        };

        #endregion

        #region MasterKeysM

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysM_US = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Numlock, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.KeypadSlash, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.KeypadAsterisk, new Tuple<int, int>(1,17) },
            { CoolerMasterLedIds.KeypadMinus, new Tuple<int, int>(1,18) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Backslash, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Keypad7, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.Keypad8, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.Keypad9, new Tuple<int, int>(2,17) },
            { CoolerMasterLedIds.KeypadPlus, new Tuple<int, int>(2,18) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.Enter, new Tuple<int, int>(3,14) },
            { CoolerMasterLedIds.Keypad4, new Tuple<int, int>(3,15) },
            { CoolerMasterLedIds.Keypad5, new Tuple<int, int>(3,16) },
            { CoolerMasterLedIds.Keypad6, new Tuple<int, int>(3,17) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad1, new Tuple<int, int>(4,15) },
            { CoolerMasterLedIds.Keypad2, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad3, new Tuple<int, int>(4,17) },
            { CoolerMasterLedIds.KeypadEnter, new Tuple<int, int>(4,18) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Keypad0, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Keypad00, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.KeypadPeriod, new Tuple<int, int>(5,17) }
        };

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysM_EU = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Numlock, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.KeypadSlash, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.KeypadAsterisk, new Tuple<int, int>(1,17) },
            { CoolerMasterLedIds.KeypadMinus, new Tuple<int, int>(1,18) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Backslash, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Keypad7, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.Keypad8, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.Keypad9, new Tuple<int, int>(2,17) },
            { CoolerMasterLedIds.KeypadPlus, new Tuple<int, int>(2,18) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.CODEA2, new Tuple<int, int>(3,12) },
            { CoolerMasterLedIds.Keypad4, new Tuple<int, int>(3,15) },
            { CoolerMasterLedIds.Keypad5, new Tuple<int, int>(3,16) },
            { CoolerMasterLedIds.Keypad6, new Tuple<int, int>(3,17) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.CODEA5, new Tuple<int, int>(4,1) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad1, new Tuple<int, int>(4,15) },
            { CoolerMasterLedIds.Keypad2, new Tuple<int, int>(4,16) },
            { CoolerMasterLedIds.Keypad3, new Tuple<int, int>(4,17) },
            { CoolerMasterLedIds.KeypadEnter, new Tuple<int, int>(4,18) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Keypad0, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Keypad00, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.KeypadPeriod, new Tuple<int, int>(5,17) }
        };

        #endregion

        #region MasterKeysS

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysS_US = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },
            { CoolerMasterLedIds.Snapshot, new Tuple<int, int>(0,15) },
            { CoolerMasterLedIds.ScrollLock, new Tuple<int, int>(0,16) },
            { CoolerMasterLedIds.Pause, new Tuple<int, int>(0,17) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Insert, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.Home, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.PageUp, new Tuple<int, int>(1,17) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Backslash, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Delete, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.End, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.PageDown, new Tuple<int, int>(2,17) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.Enter, new Tuple<int, int>(3,14) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.Up, new Tuple<int, int>(4,16) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Left, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Down, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.Right, new Tuple<int, int>(5,17) }
        };

        private static readonly Dictionary<CoolerMasterLedIds, Tuple<int, int>> MasterKeysS_EU = new Dictionary<CoolerMasterLedIds, Tuple<int, int>>
        {
            { CoolerMasterLedIds.Esc, new Tuple<int, int>(0,0) },
            { CoolerMasterLedIds.F1, new Tuple<int, int>(0,1) },
            { CoolerMasterLedIds.F2, new Tuple<int, int>(0,2) },
            { CoolerMasterLedIds.F3, new Tuple<int, int>(0,3) },
            { CoolerMasterLedIds.F4, new Tuple<int, int>(0,4) },
            { CoolerMasterLedIds.F5, new Tuple<int, int>(0,6) },
            { CoolerMasterLedIds.F6, new Tuple<int, int>(0,7) },
            { CoolerMasterLedIds.F7, new Tuple<int, int>(0,8) },
            { CoolerMasterLedIds.F8, new Tuple<int, int>(0,9) },
            { CoolerMasterLedIds.F9, new Tuple<int, int>(0,11) },
            { CoolerMasterLedIds.F10, new Tuple<int, int>(0,12) },
            { CoolerMasterLedIds.F11, new Tuple<int, int>(0,13) },
            { CoolerMasterLedIds.F12, new Tuple<int, int>(0,14) },
            { CoolerMasterLedIds.Snapshot, new Tuple<int, int>(0,15) },
            { CoolerMasterLedIds.ScrollLock, new Tuple<int, int>(0,16) },
            { CoolerMasterLedIds.Pause, new Tuple<int, int>(0,17) },

            { CoolerMasterLedIds.Gravis, new Tuple<int, int>(1,0) },
            { CoolerMasterLedIds.D1, new Tuple<int, int>(1,1) },
            { CoolerMasterLedIds.D2, new Tuple<int, int>(1,2) },
            { CoolerMasterLedIds.D3, new Tuple<int, int>(1,3) },
            { CoolerMasterLedIds.D4, new Tuple<int, int>(1,4) },
            { CoolerMasterLedIds.D5, new Tuple<int, int>(1,5) },
            { CoolerMasterLedIds.D6, new Tuple<int, int>(1,6) },
            { CoolerMasterLedIds.D7, new Tuple<int, int>(1,7) },
            { CoolerMasterLedIds.D8, new Tuple<int, int>(1,8) },
            { CoolerMasterLedIds.D9, new Tuple<int, int>(1,9) },
            { CoolerMasterLedIds.D0, new Tuple<int, int>(1,10) },
            { CoolerMasterLedIds.Minus, new Tuple<int, int>(1,11) },
            { CoolerMasterLedIds.Equals, new Tuple<int, int>(1,12) },
            { CoolerMasterLedIds.Backspace, new Tuple<int, int>(1,14) },
            { CoolerMasterLedIds.Insert, new Tuple<int, int>(1,15) },
            { CoolerMasterLedIds.Home, new Tuple<int, int>(1,16) },
            { CoolerMasterLedIds.PageUp, new Tuple<int, int>(1,17) },

            { CoolerMasterLedIds.Tab, new Tuple<int, int>(2,0) },
            { CoolerMasterLedIds.Q, new Tuple<int, int>(2,1) },
            { CoolerMasterLedIds.W, new Tuple<int, int>(2,2) },
            { CoolerMasterLedIds.E, new Tuple<int, int>(2,3) },
            { CoolerMasterLedIds.R, new Tuple<int, int>(2,4) },
            { CoolerMasterLedIds.T, new Tuple<int, int>(2,5) },
            { CoolerMasterLedIds.Y, new Tuple<int, int>(2,6) },
            { CoolerMasterLedIds.U, new Tuple<int, int>(2,7) },
            { CoolerMasterLedIds.I, new Tuple<int, int>(2,8) },
            { CoolerMasterLedIds.O, new Tuple<int, int>(2,9) },
            { CoolerMasterLedIds.P, new Tuple<int, int>(2,10) },
            { CoolerMasterLedIds.BracketLeft, new Tuple<int, int>(2,11) },
            { CoolerMasterLedIds.BracketRight, new Tuple<int, int>(2,12) },
            { CoolerMasterLedIds.Enter, new Tuple<int, int>(2,14) },
            { CoolerMasterLedIds.Delete, new Tuple<int, int>(2,15) },
            { CoolerMasterLedIds.End, new Tuple<int, int>(2,16) },
            { CoolerMasterLedIds.PageDown, new Tuple<int, int>(2,17) },

            { CoolerMasterLedIds.CapsLock, new Tuple<int, int>(3,0) },
            { CoolerMasterLedIds.A, new Tuple<int, int>(3,1) },
            { CoolerMasterLedIds.S, new Tuple<int, int>(3,2) },
            { CoolerMasterLedIds.D, new Tuple<int, int>(3,3) },
            { CoolerMasterLedIds.F, new Tuple<int, int>(3,4) },
            { CoolerMasterLedIds.G, new Tuple<int, int>(3,5) },
            { CoolerMasterLedIds.H, new Tuple<int, int>(3,6) },
            { CoolerMasterLedIds.J, new Tuple<int, int>(3,7) },
            { CoolerMasterLedIds.K, new Tuple<int, int>(3,8) },
            { CoolerMasterLedIds.L, new Tuple<int, int>(3,9) },
            { CoolerMasterLedIds.Semicolon, new Tuple<int, int>(3,10) },
            { CoolerMasterLedIds.Apostroph, new Tuple<int, int>(3,11) },
            { CoolerMasterLedIds.CODEA2, new Tuple<int, int>(3,12) },

            { CoolerMasterLedIds.LShift, new Tuple<int, int>(4,0) },
            { CoolerMasterLedIds.CODEA5, new Tuple<int, int>(4,1) },
            { CoolerMasterLedIds.Z, new Tuple<int, int>(4,2) },
            { CoolerMasterLedIds.X, new Tuple<int, int>(4,3) },
            { CoolerMasterLedIds.C, new Tuple<int, int>(4,4) },
            { CoolerMasterLedIds.V, new Tuple<int, int>(4,5) },
            { CoolerMasterLedIds.B, new Tuple<int, int>(4,6) },
            { CoolerMasterLedIds.N, new Tuple<int, int>(4,7) },
            { CoolerMasterLedIds.M, new Tuple<int, int>(4,8) },
            { CoolerMasterLedIds.Comma, new Tuple<int, int>(4,9) },
            { CoolerMasterLedIds.Period, new Tuple<int, int>(4,10) },
            { CoolerMasterLedIds.Slash, new Tuple<int, int>(4,11) },
            { CoolerMasterLedIds.RShift, new Tuple<int, int>(4,14) },
            { CoolerMasterLedIds.Up, new Tuple<int, int>(4,16) },

            { CoolerMasterLedIds.LCtrl, new Tuple<int, int>(5,0) },
            { CoolerMasterLedIds.LWin, new Tuple<int, int>(5,1) },
            { CoolerMasterLedIds.LAlt, new Tuple<int, int>(5,2) },
            { CoolerMasterLedIds.Space, new Tuple<int, int>(5,6) },
            { CoolerMasterLedIds.RAlt, new Tuple<int, int>(5,10) },
            { CoolerMasterLedIds.RWin, new Tuple<int, int>(5,11) },
            { CoolerMasterLedIds.App, new Tuple<int, int>(5,12) },
            { CoolerMasterLedIds.RCtrl, new Tuple<int, int>(5,14) },
            { CoolerMasterLedIds.Left, new Tuple<int, int>(5,15) },
            { CoolerMasterLedIds.Down, new Tuple<int, int>(5,16) },
            { CoolerMasterLedIds.Right, new Tuple<int, int>(5,17) }
        };
        
        #endregion

        /// <summary>
        /// Contains all the hardware-id mappings for CoolerMaster devices.
        /// </summary>
        public static readonly Dictionary<CoolerMasterDevicesIndexes, Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>> Mapping =
            new Dictionary<CoolerMasterDevicesIndexes, Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>>
            {
                { CoolerMasterDevicesIndexes.MasterKeys_L, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysL_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysL_EU }
                  }
                },

                { CoolerMasterDevicesIndexes.MasterKeys_M, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysM_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysM_EU }
                  }
                },

                { CoolerMasterDevicesIndexes.MasterKeys_S, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysS_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysS_EU }
                  }
                },

                { CoolerMasterDevicesIndexes.MasterKeys_L_White, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysL_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysL_EU }
                  }
                },

                { CoolerMasterDevicesIndexes.MasterKeys_M_White, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysM_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysM_EU }
                  }
                },

                { CoolerMasterDevicesIndexes.MasterKeys_S_White, new Dictionary<CoolerMasterPhysicalKeyboardLayout, Dictionary<CoolerMasterLedIds, Tuple<int, int>>>
                  {
                    { CoolerMasterPhysicalKeyboardLayout.US, MasterKeysS_US },
                    { CoolerMasterPhysicalKeyboardLayout.EU, MasterKeysS_EU }
                  }
                },
            };

        #endregion
    }
}
