summaryrefslogtreecommitdiff
path: root/keyboard/gh60
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/gh60')
-rw-r--r--keyboard/gh60/Makefile247
-rw-r--r--keyboard/gh60/Makefile.pjrc116
-rw-r--r--keyboard/gh60/README.md201
-rw-r--r--keyboard/gh60/config.h231
-rw-r--r--keyboard/gh60/gh60.c68
-rw-r--r--keyboard/gh60/gh60.h (renamed from keyboard/gh60/keymap_common.h)165
-rw-r--r--keyboard/gh60/gh60revc.jpgbin0 -> 1424987 bytes
-rw-r--r--keyboard/gh60/keymaps/default/compiled.hex1019
-rw-r--r--keyboard/gh60/keymaps/default/keymap.c69
-rw-r--r--keyboard/gh60/keymaps/hasu.c145
-rw-r--r--keyboard/gh60/keymaps/hhkb.c52
-rw-r--r--keyboard/gh60/keymaps/plain.c11
-rw-r--r--keyboard/gh60/keymaps/poker.c104
-rw-r--r--keyboard/gh60/keymaps/poker_bit.c50
-rw-r--r--keyboard/gh60/keymaps/poker_set.c82
-rw-r--r--keyboard/gh60/keymaps/spacefn.c55
-rw-r--r--keyboard/gh60/led.c31
-rw-r--r--keyboard/gh60/matrix.c211
-rw-r--r--keyboard/gh60/pinout.txt18
19 files changed, 1588 insertions, 1287 deletions
diff --git a/keyboard/gh60/Makefile b/keyboard/gh60/Makefile
index 9429049fd9..730bef56c3 100644
--- a/keyboard/gh60/Makefile
+++ b/keyboard/gh60/Makefile
@@ -1,135 +1,112 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-# Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-# (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-# have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-# have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-# (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-# (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-# with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-# bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-# Target file name (without extension).
-TARGET = gh60_lufa
-
-# Directory common source filess exist
-TOP_DIR = ../..
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# project specific files
-SRC = matrix.c \
- led.c
-
-ifdef KEYMAP
- SRC := keymaps/$(KEYMAP).c $(SRC)
-else
- SRC := keymaps/poker.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TOP_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TOP_DIR)/quantum/quantum.mk
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+# Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+# (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+# have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+# have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+# (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+# (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+# with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+# bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+# CONSOLE_ENABLE ?= yes # Console for debug(+400)
+# COMMAND_ENABLE ?= yes # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif
+
diff --git a/keyboard/gh60/Makefile.pjrc b/keyboard/gh60/Makefile.pjrc
deleted file mode 100644
index 8ed73a248d..0000000000
--- a/keyboard/gh60/Makefile.pjrc
+++ /dev/null
@@ -1,116 +0,0 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-# Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-# (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-# have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-# have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-# (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-# (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-# with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-# bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-# Target file name (without extension).
-TARGET = gh60_pjrc
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# project specific files
-SRC = keymap_common.c \
- matrix.c \
- led.c
-
-ifdef KEYMAP
- SRC := keymaps/$(KEYMAP).c $(SRC)
-else
- SRC := keymaps/poker.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-MCU = atmega32u4
-#MCU = at90usb1286
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover(+500)
-#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
-
-plain: OPT_DEFS += -DKEYMAP_PLAIN
-plain: all
-
-poker: OPT_DEFS += -DKEYMAP_POKER
-poker: all
-
-poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
-poker_set: all
-
-poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
-poker_bit: all
diff --git a/keyboard/gh60/README.md b/keyboard/gh60/README.md
index 41a757ea3a..bf209be8c6 100644
--- a/keyboard/gh60/README.md
+++ b/keyboard/gh60/README.md
@@ -1,141 +1,60 @@
-GH60 keyboard firmware
-======================
-DIY compact keyboard designed and run by komar007 and Geekhack community.
-
-- Both Rev.A and Rev.B PCB are supported by one firmware binary(issue #64)
-
-## GH60 Resources
-- [KOMAR's project page](http://blog.komar.be/projects/gh60-programmable-keyboard/)
-- [Prototyping](http://geekhack.org/index.php?topic=34959.0)
-- [Rev.A PCB test](http://geekhack.org/index.php?topic=37570.0)
-- [Rev.B PCB test](http://geekhack.org/index.php?topic=50685.0)
-- [Group buy](http://geekhack.org/index.php?topic=41464.0)
-
-
-## Build
-Move to this directory then just run `make` like:
-
- $ make
-
-Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason to do so now.
-
-
-## Keymap
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document(you can find in top README.md) and existent keymap files.
-
-To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:
-
- $ make KEYMAP=[poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
-
-
-### 1 Poker
-[poker.c](keymaps/poker.c) emulates original Poker layers
-while both [poker_bit.c](keymaps/poker_bit.c) and [poker_set.c](keymaps/poker_set.c) implement the same layout in different ways and they fix a minor issue of original Poker and enhance arrow keys.
-
- Fn + Esc = `
- Fn + {left, down, up, right} = {home, pgdown, pgup, end}
-
-#### 1.0 Default layer
- ,-----------------------------------------------------------.
- | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
- |-----------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- |-----------------------------------------------------------|
- |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
- |-----------------------------------------------------------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
- |-----------------------------------------------------------|
- |Ctrl|Gui |Alt | Space |Fn |Gui |App |Ctrl|
- `-----------------------------------------------------------'
-#### 1.1 Poker Fn layer
- ,-----------------------------------------------------------.
- |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
- |-----------------------------------------------------------|
- | |FnQ| Up| | | | | | |Cal| |Hom|Ins| |
- |-----------------------------------------------------------|
- | |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
- |-----------------------------------------------------------|
- | |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| Up |
- |-----------------------------------------------------------|
- | | | | FnS |Fn |Left|Down|Righ|
- `-----------------------------------------------------------'
-
-
-### 2. Plain
-Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
-See [plain.c](keymaps/plain.c) for detail.
-
-#### 1.0 Plain Default layer
- ,-----------------------------------------------------------.
- |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
- |-----------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- |-----------------------------------------------------------|
- |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
- |-----------------------------------------------------------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
- |-----------------------------------------------------------|
- |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
- `-----------------------------------------------------------'
-
-
-### 3. Hasu
-This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [hasu.c](keymaps/hasu.c) for detail.
-
-
-### 4. SpaceFN
-This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [spacefn.c](keymaps/spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
-
-#### 4.0 Default layer
- ,-----------------------------------------------------------.
- |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
- |-----------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- |-----------------------------------------------------------|
- |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
- |-----------------------------------------------------------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
- |-----------------------------------------------------------|
- |Ctrl|Gui |Alt | Space/Fn |Alt |Gui |App |Ctrl|
- `-----------------------------------------------------------'
-#### 4.1 SpaceFN layer
- ,-----------------------------------------------------------.
- |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- |-----------------------------------------------------------|
- | | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- |-----------------------------------------------------------|
- | | | | | | |PgU|Lef|Dow|Rig| | | |
- |-----------------------------------------------------------|
- | | | | | |Spc|PgD|` |~ | | | |
- |-----------------------------------------------------------|
- | | | | Fn | | | | |
- `-----------------------------------------------------------'
-
-
-### 5. HHKB
-[hhkb.c](keymaps/hhkb.c) emulates original HHKB layers.
-#### 5.0: Default layer
- ,-----------------------------------------------------------.
- |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
- |-----------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
- |-----------------------------------------------------------|
- |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
- |-----------------------------------------------------------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
- |-----------------------------------------------------------|
- | |Gui |Alt | Space | |Alt |Gui | |
- `-----------------------------------------------------------'
-#### 5.1: HHKB Fn layer
- ,-----------------------------------------------------------.
- |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- |-----------------------------------------------------------|
- |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
- |-----------------------------------------------------------|
- | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
- |-----------------------------------------------------------|
- | | | | | | | +| -|End|PgD|Dow| | |
- |-----------------------------------------------------------|
- | | | | | | | | |
- `-----------------------------------------------------------'
-
+## gh60 Rev C keyboard firmware
+
+![gh60 Rev C PCB](gh60revc.jpg)
+
+ /* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
+ * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
+ */
+
+ /* Row pin configuration
+ * row: 0 1 2 3 4
+ * pin: D0 D1 D2 D3 D5
+ */
+
+ GPIO pads
+ 0 F7 WASD LEDs
+ 1 F6 ESC LED
+ 2 F5 FN LED
+ 3 F4 POKER Arrow LEDs
+
+ B2 Capslock LED
+ B0 not connected
+
+Functions to controls LED clusters
+
+ gh60_caps_led_on()
+ gh60_poker_leds_on()
+ gh60_fn_led_on()
+ gh60_esc_led_on()
+ gh60_wasd_leds_on()
+
+ gh60_caps_led_off()
+ gh60_poker_leds_off()
+ gh60_fn_led_off()
+ gh60_esc_led_off()
+ gh60_wasd_leds_off()
+
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboard/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboard/gh60/config.h b/keyboard/gh60/config.h
index e9c0f4366d..4813c4e786 100644
--- a/keyboard/gh60/config.h
+++ b/keyboard/gh60/config.h
@@ -1,70 +1,161 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER geekhack
-#define PRODUCT GH60
-#define DESCRIPTION t.m.k. keyboard firmware for GH60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT GH60
+#define DESCRIPTION t.m.k. keyboard firmware for GH60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+ #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+// Rev A
+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
+// Rev B/C
+ #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/gh60/gh60.c b/keyboard/gh60/gh60.c
new file mode 100644
index 0000000000..6da4d8ee3e
--- /dev/null
+++ b/keyboard/gh60/gh60.c
@@ -0,0 +1,68 @@
+#include "gh60.h"
+#include "led.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+ return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ gh60_caps_led_on();
+ } else {
+ gh60_caps_led_off();
+ }
+
+ // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // gh60_esc_led_on();
+ // } else {
+ // gh60_esc_led_off();
+ // }
+
+ // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ // gh60_fn_led_on();
+ // } else {
+ // gh60_fn_led_off();
+ // }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboard/gh60/keymap_common.h b/keyboard/gh60/gh60.h
index 896badd748..95e5e1ebc7 100644
--- a/keyboard/gh60/keymap_common.h
+++ b/keyboard/gh60/gh60.h
@@ -1,84 +1,81 @@
-/*
-Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "host.h"
-#include "print.h"
-#include "debug.h"
-#include "keymap.h"
-
-
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
-/* GH60 keymap definition macro
- * K2C, K31 and K3C are extra keys for ISO
- */
-#define KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \
-}
-
-/* ANSI valiant. No extra keys for ISO */
-#define KEYMAP_ANSI( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K41, K42, K45, K4A, K4B, K4C, K4D \
-) KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
- K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \
- K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \
-)
-
-
-#define KEYMAP_HHKB( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
- K40, K41, K42, K45, K4A, K4B, K4C, K4D \
-) KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
- K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
-)
-
-#endif
+#ifndef GH60_H
+#define GH60_H
+
+#include "matrix.h"
+#include "keymap_common.h"
+#include "backlight.h"
+#include <stddef.h>
+
+/* GH60 LEDs
+ * GPIO pads
+ * 0 F7 WASD LEDs
+ * 1 F6 ESC LED
+ * 2 F5 FN LED
+ * 3 F4 POKER Arrow LEDs
+ * B2 Capslock LED
+ * B0 not connected
+ */
+inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
+
+inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+
+/* GH60 keymap definition macro
+ * K2C, K31 and K3C are extra keys for ISO
+ */
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \
+ { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \
+}
+
+/* ANSI valiant. No extra keys for ISO */
+#define KEYMAP_ANSI( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
+ K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \
+ K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \
+)
+
+#define KEYMAP_HHKB( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
+ K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
+)
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+bool process_action_user(keyrecord_t *record);
+void led_set_user(uint8_t usb_led);
+
+#endif
diff --git a/keyboard/gh60/gh60revc.jpg b/keyboard/gh60/gh60revc.jpg
new file mode 100644
index 0000000000..6c88ad2442
--- /dev/null
+++ b/keyboard/gh60/gh60revc.jpg
Binary files differ
diff --git a/keyboard/gh60/keymaps/default/compiled.hex b/keyboard/gh60/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..5c253e970a
--- /dev/null
+++ b/keyboard/gh60/keymaps/default/compiled.hex
@@ -0,0 +1,1019 @@
+:100000000C9428020C946C020C946C020C946C02FC
+:100010000C946C020C946C020C946C020C946C02A8
+:100020000C946C020C946C020C94A50B0C94770C41
+:100030000C949B190C946C020C946C020C946C0242
+:100040000C946C020C946C020C946C020C946C0278
+:100050000C946C020C94031A0C946C020C946C02B9
+:100060000C946C020C946C020C946C020C946C0258
+:100070000C946C020C946C020C946C020C946C0248
+:100080000C946C020C946C020C946C020C946C0238
+:100090000C946C020C946C020C946C020C946C0228
+:1000A0000C946C020C946C020C946C02E40C060D23
+:1000B000F40D060DF40D4B0D6E0DF40DC30DD60DA4
+:1000C000B310B310E210E21021114111711271123C
+:1000D0004C117112FC11FC116212711271126B122F
+:1000E0000912091209120912091209120912091238
+:1000F0000912091209120912091209120912091228
+:10010000191227122E1235123F12F1A1048A29006A
+:100110001E001F00200021002200230024002500D3
+:10012000260027002D002E0035002B0014001A0099
+:100130000800150017001C0018000C001200130026
+:100140002F0030002A0039000400160007000900C3
+:100150000A000B000D000E000F00330034000000F9
+:100160002800E100C1001D001B0006001900050069
+:1001700011001000360037003800C000E500E00034
+:10018000E300E200000000002C000000000000007E
+:100190003100E600E7006500E40029003A003B007A
+:1001A0003C003D003E003F00400041004200430053
+:1001B000440045000100010001005200010001005F
+:1001C0000100010001000100010001000100010027
+:1001D00001000100500051004F000100010001002A
+:1001E0000100010001000100010001000100010007
+:1001F00001000100010001000100010001000100F7
+:1002000001000100010001000100010001000100E6
+:1002100000000000010000000000000001000100DB
+:1002200001000100010001000100010001000100C6
+:1002300001000100010001000100010001000100B6
+:1002400001000100010001000100010001000100A6
+:100250000100010001000100010001000100010096
+:100260000100010001000100010001000100010086
+:100270000100010001000100010001000100010076
+:100280000100010001000100010001000100010066
+:100290000100010052000100010001000000000007
+:1002A00001000000000000000100010050005100AA
+:1002B0004F000A03470048003600300000001203D8
+:1002C0006700650065006B006800610063006B00FB
+:1002D00000000403090409026D00040100A0FA09EA
+:1002E0000400000103010100092111010001223F66
+:1002F000000705810308000A090401000103010247
+:1003000000092111010001224D00070582030800A8
+:100310000A09040200010300000009211101000183
+:100320002236000705830308000A090403000103BD
+:100330000000000921110100012239000705840392
+:100340001000011201100100000008EDFE606001C4
+:10035000000102000105010906A101050719E029B4
+:10036000E715002501950875018102050819012985
+:100370000595057501910295017503910105071910
+:1003800000297715002501957875018102C00501C6
+:100390000980A101850216010026B7001A01002A72
+:1003A000B700751095018100C0050C0901A10185F8
+:1003B00003160100269C021A01002A9C0275109562
+:1003C000018100C005010902A1010901A10005097F
+:1003D0001901290515002501950575018102950171
+:1003E000750381010501093009311581257F9502C9
+:1003F0007508810609381581257F950175088106E4
+:10040000050C0A38021581257F950175088106C003
+:10041000C005010906A101050719E029E715002516
+:10042000019508750181029501750881010508197A
+:100430000129059505750191029501750391010545
+:1004400007190029FF150025FF950675088100C0D2
+:1004500011241FBECFEFDAE0DEBFCDBF04B603FE2E
+:1004600024C08091F1019091F201A091F301B0912B
+:10047000F4018730904BA740B04BB9F41092F101D2
+:100480001092F2011092F3011092F40114BE84B79D
+:10049000877F84BF88E10FB6F89480936000109244
+:1004A00060000FBEE0E0F8E3099511E0A0E0B1E0E4
+:1004B000EEE5FFE302C005900D92AC33B107D9F72A
+:1004C00011E0ACE3B1E001C01D92A13FB107E1F73B
+:1004D0000E94EB080C94AD1F0C940000089581E07D
+:1004E000089508950C946E020C9490020C946F027F
+:1004F00081FF02C0229A01C022982A980C947102AE
+:1005000061110BC0FC018281882321F085EE0E94DD
+:10051000620F03C085EE0E941F1080E090E00895F6
+:100520008091B70181FF04C0879A8F98859A03C094
+:1005300087988F9885988D9882FF04C0849A8C98AC
+:10054000869A03C084988C9886988E98089581E046
+:1005500008950C94A70208950F931F93CF93DF93F0
+:100560008C01FC01C081D181CE010E94D517BE0152
+:100570000E945903EC01B8010E94A902882309F4E2
+:100580008DC0F8018281882309F44AC08091470117
+:1005900081111FC0C431F0E5DF0709F051C00E948E
+:1005A000AB0281E0809347010E94CD1990934601F0
+:1005B0008093450110923E011092400110923F013C
+:1005C0001092420110924101109244011092430195
+:1005D00065C080914501909146010E94D919883CDF
+:1005E000910570F480913E01E82FF0E0EE0FFF1FBF
+:1005F000E15CFE4FD183C0838F5F80933E014EC08C
+:10060000C43880E5D80721F0C538D04501F13AC09B
+:10061000F8018281882341F010923C0182E01EC0E3
+:10062000C438E0E5DE0759F580913C01811106C030
+:1006300086E20E94620F86E20E941F1082E01CC0C8
+:10064000C438F0E5DF0741F3C538D045D9F4F801E7
+:100650008281882331F010923D0180E20E946E1069
+:100660001DC080913D01811106C087E20E94620F8A
+:1006700087E20E941F1080E20E9475100FC0C538EB
+:10068000D04529F381E080933C0180933D01C8016E
+:10069000DF91CF911F910F910C94760280E0DF9152
+:1006A000CF911F910F9108950C9472020C947402D3
+:1006B00008959EE0799FF001112496E4899FE00D52
+:1006C000F11D1124E60FF11DEE0FFF1FE25FFE4F3B
+:1006D000859194910895880F991FFC01E657F04089
+:1006E000859194910895880F991FFC01E65FFE4F54
+:1006F0008591949108950F931F93CF93DF93EC010D
+:10070000811520E3920750F5C11580E2D80708F063
+:10071000C3C0CB3BD10590F4C83AD10508F06AC0FC
+:10072000C53AD10508F05BC0C430D10508F0D0C18E
+:10073000219709F0CAC101E010E00AC2CF3FD105FC
+:1007400011F008F0C5C1C03FD10508F0A2C0CE012C
+:10075000805E9109089708F4BBC1B7C1C13090E52C
+:10076000D90709F4A2C020F5C0318FE4D80770F48E
+:10077000C11590E4D90708F094C0C11521E3D20750
+:1007800008F0A3C1DD278E01106CE2C1C115D04570
+:1007900009F09BC10E94DC128FEF94E32CE08150A2
+:1007A00090402040E1F700C000000E94281AD0C10C
+:1007B000C11597E5D90758F4C03121E5D20708F0F3
+:1007C0001CC1C43180E5D80708F475C07EC1CE01D4
+:1007D00090578115904108F078C1DF7073C1C53A18
+:1007E000D10509F477C1C63AD10509F076C102E80E
+:1007F00010E4AEC1C83AD10509F472C1C93AD105B5
+:1008000009F471C1CA3AD10509F470C1CB3AD105D6
+:1008100009F46FC1CC3AD10509F46EC1CD3AD105C6
+:1008200009F46DC1C03BD10509F46CC1CE3AD105C4
+:1008300009F46BC1CF3AD10509F46AC1C13BD105B6
+:1008400009F469C1C23BD10509F468C1C33BD105B4
+:1008500009F467C1C43BD10509F466C1C53BD105A4
+:1008600009F465C1C63BD10509F464C1C73BD10594
+:1008700009F463C1C83BD10509F462C1C93BD10584
+:1008800009F461C1CA3BD10509F460C100E014E478
+:100890005FC18E0110655CC1CE019F700E94730321
+:1008A00058C1DF708E01106A53C18091D4018160FC
+:1008B0008093D4014DC10E94D51B811102C00E94BA
+:1008C000BB1B0E94F21B90E09093F1018093F0011A
+:1008D000C23080E5D80721F48091F001816086C0A4
+:1008E000C43090E5D90721F48091F00182607EC088
+:1008F000C63020E5D20721F48091F001846076C0F3
+:10090000C83080E5D80719F48091F00127C0CA30BB
+:1009100090E5D90721F48091F001806167C0CC3067
+:1009200020E5D20721F48091F00180625FC0CE30D3
+:1009300080E5D80721F48091F001806457C0C03170
+:1009400090E5D90721F48091F00180684FC0C23151
+:1009500020E5D20729F48091F0018460886046C0C8
+:10096000C33080E5D80721F48091F0018E7F3EC02E
+:10097000C53090E5D90721F48091F0018D7F36C014
+:10098000C73020E5D20721F48091F0018B7F2EC083
+:10099000C93080E5D80719F48091F00126C0CB302A
+:1009A00090E5D90721F48091F0018F7E1FC0CD30F2
+:1009B00020E5D20721F48091F0018F7D17C0CF3060
+:1009C00080E5D80721F48091F0018F7B0FC0C13101
+:1009D00090E5D90721F48091F0018F7707C0C331EA
+:1009E000D04531F48091F0018B7F877F8093F001B7
+:1009F0008091F0010E94F61BABC08D2F99278F705C
+:100A0000992781309105D9F49E012370332702C0C4
+:100A1000880F991F2A95E2F79C688E0144E0000F29
+:100A2000111F4A95E1F700271370802B912B53E09B
+:100A3000CC0FDD1F5A95E1F7C076DD272FC082303D
+:100A4000910531F4DC2FCC278E01016F106A80C034
+:100A50008330910569F4CE018370992701E010E09D
+:100A600002C0000F111F8A95E2F7C8019C680FC0F1
+:100A700084309105B9F4CE018370992701E010E02C
+:100A800002C0000F111F8A95E2F7C8019A6823E09F
+:100A9000CC0FDD1F2A95E1F7C07ED7708C010C2B9F
+:100AA0001D2B56C08530910531F4DC2FCC278E01EB
+:100AB000046F106A4DC0069709F04AC0CF71DD2758
+:100AC000DC2FCC278E01106243C000E010E040C054
+:100AD0008E013EC001E810E43BC003E810E438C0DA
+:100AE00002EE14E435C009EE14E432C00AEE14E458
+:100AF0002FC005EB14E42CC006EB14E429C007EB6F
+:100B000014E426C00CEC14E423C00DEC14E420C063
+:100B100003E815E41DC00AE815E41AC002E915E46B
+:100B200017C004E915E414C001E216E411C003E2A1
+:100B300016E40EC004E216E40BC005E216E408C099
+:100B400006E216E405C007E216E402C00AE216E473
+:100B5000C801DF91CF911F910F9108959EE0799F79
+:100B6000F001112496E4899FE00DF11D1124E60F98
+:100B7000F11DEE0FFF1FE25FFE4F85919491803EC5
+:100B80009105E0F4803C910558F58133910509F415
+:100B90006FC048F48932910509F463C08A32910527
+:100BA00009F46DC072C089339105E9F0823891056E
+:100BB000D1F08533910509F44DC067C0833E91059E
+:100BC00081F138F4803E9105B9F0823E9105D9F06B
+:100BD0005CC0863E910561F1873E9105A1F155C04B
+:100BE0000E946B0308952091F00120FD02C021FFB7
+:100BF0004CC080EE90E049C08091F00180FFF9CFB9
+:100C000089E390E042C08091F00182FF0EC08091A4
+:100C1000F00184FF03C080E090E037C083EE90E0F5
+:100C200034C08091F00182FFF2CF82EE90E02DC0BF
+:100C30008091F00183FF0BC08091F00184FDEBCF28
+:100C400087EE90E022C08091F00183FFF5CF86EE21
+:100C500090E01BC08091F00185FF07C089E290E021
+:100C600014C08091F00185FFF9CF85E390E00DC0BD
+:100C70008091F00186FF07C08AE290E006C0809173
+:100C8000F00186FFF9CF81E390E00E947B03089595
+:100C90000C947802E82FF0E0ED5DFE4F8081E82FA4
+:100CA000EF70F0E082958F7021E030E0A90102C082
+:100CB000440F551F8A95E2F740A308950F931F93A1
+:100CC000CF93DF9385B7806885BF85B7806885BF80
+:100CD000C4E0D0E001E010E0FE01ED5DFE4F808158
+:100CE000E82FEF70F0E021A182958F70A80102C07B
+:100CF000440F551F8A95E2F7CA01822B81A38C2FDE
+:100D00000E944A06219740F78DE090E061E070E094
+:100D1000FC01EB5EFE4F2081E22FEF70F0E042A17C
+:100D200022952F70DB0102C0AA0FBB1F2A95E2F7A4
+:100D30009D01242B22A3019758F7DF91CF911F919A
+:100D40000F910C945403EF92FF920F931F93CF9344
+:100D5000DF9302E511E0C4E0EE24E394F12CD5E04A
+:100D60008C2F0E944A068DE090E040E050E0FC01AC
+:100D7000EB5EFE4F6081E62FEF70F0E020A130E0E7
+:100D800062956F7002C0359527956A95E2F720FD50
+:100D900009C09701082E02C0220F331F0A94E2F700
+:100DA000422B532B019718F7F801929182918F01F2
+:100DB0008417950721F051834083D09300018C2F35
+:100DC0000E944A06C15060F68091000187FD1FC055
+:100DD0008150809300018F3F39F08FE99FE00197A8
+:100DE000F1F700C0000013C080E090E0FC01EE5A73
+:100DF000FE4FDC01A85BBE4F18962D913C911997D0
+:100E0000318720870297863FEFEF9E0779F70E9490
+:100E1000560381E0DF91CF911F910F91FF90EF90EA
+:100E20000895E82FF0E0EE0FFF1FEE5AFE4F80818D
+:100E30009181089508950F931F93CF930CE511E0CE
+:100E4000C0E0F801929182918F010E945019C80F61
+:100E5000F1E002351F07A9F78C2FCF911F910F9159
+:100E6000089580916C010895CF93DF9300D01F9275
+:100E7000CDB7DEB79C018091E701843019F593E08E
+:100E800099833B832A839093E9008FEF9091E80048
+:100E9000815095FD06C095ED9A95F1F700008111FE
+:100EA000F5CF8091E80085FF0DC040E050E063E0A1
+:100EB00070E0CE0101960E9495098091E8008E773E
+:100EC0008093E8000F900F900F90DF91CF910895DD
+:100ED000CF93DF9300D01F92CDB7DEB72091E7010B
+:100EE000243021F522E029839B838A8383E0809349
+:100EF000E9008FEF9091E800815095FD06C095EDD7
+:100F00009A95F1F700008111F5CF8091E80085FFF7
+:100F10000DC040E050E063E070E0CE0101960E9419
+:100F200095098091E8008E778093E8000F900F90EC
+:100F30000F90DF91CF9108952091E7012430F1F4D3
+:100F400022E02093E9002FEF3091E800215035FD99
+:100F500006C035ED3A95F1F700002111F5CF20914B
+:100F6000E80025FF0BC040E050E065E070E00E9423
+:100F700095098091E8008E778093E8000895CF93DB
+:100F8000DF93EC019091E701943009F046C0809125
+:100F90000B018823D9F080910C018823B9F090933C
+:100FA000E9008FEF9091E800815095FD06C095E132
+:100FB0009A95F1F700008111F5CF8091E80085FF47
+:100FC0002CC040E050E060E170E017C081E0809309
+:100FD000E9008FEF9091E800815095FD06C095EDF6
+:100FE0009A95F1F700008111F5CF8091E80085FF17
+:100FF00014C040E050E068E070E0CE010E94950926
+:101000008091E8008E778093E80080E1FE01ACE5F6
+:10101000B1E001900D928A95E1F7DF91CF910895AB
+:101020008091E601811109C00E942A0B0E94870B62
+:101030008091E20084608093E20008951092E601BE
+:101040000895089508950C94951942E061EC81E0AB
+:101050000E94A40A42E061EC82E00E94A40A42E0FD
+:1010600061EC83E00E94A40A42E161EC84E00C940C
+:10107000A40A8091E901833009F455C030F481302D
+:1010800071F0823009F48EC008958A3009F47AC074
+:101090008B3009F460C0893009F09CC020C0809179
+:1010A000E801813A09F096C08091E800877F80933B
+:1010B000E8008091EC019091ED01892B21F460E131
+:1010C0008CE591E003C060E080E090E070E00E9479
+:1010D000E0098091E8008B778093E8000895809183
+:1010E000E801813209F076C08091EC019091ED0128
+:1010F000009719F0039709F06DC08091E800877F91
+:101100008093E8008091E80082FD05C08091E701AE
+:101110008111F8CF5FC08091F10080936C018091C4
+:10112000E8008B7753C08091E801813A09F052C002
+:101130008091EC019091ED01892B09F04BC08091D9
+:10114000E800877F8093E8008091E80080FFFCCF73
+:1011500080910B0136C08091E8018132D9F58091F0
+:10116000EC019091ED01892BA9F58091E800877F32
+:101170008093E8000E94D90A8091EA0180930B01D4
+:101180000C94DC128091E801813221F58091E80015
+:10119000877F8093E8000E94D90A8091EB018093B9
+:1011A0006D0108958091E801813AA1F48091E800F1
+:1011B000877F8093E8008091E80080FFFCCF8091DA
+:1011C0006D018093F1008091E8008E778093E800B4
+:1011D0000C94D90A089584B7877F84BF88E10FB63D
+:1011E000F89480936000109260000FBE90E080E859
+:1011F0000FB6F89480936100909361000FBE0E9437
+:101200007C0E0E942A0B0E94870B8091E200846072
+:101210008093E20078940E940D0E0E947E0E81E081
+:1012200091E00E94280E8091E701853069F40E94C8
+:101230005C198091E5018823B1F30E948719882306
+:1012400091F30E947F09EFCF0E94840EECCF292FEB
+:10125000332723303105C9F064F42130310581F0A2
+:101260002230310509F043C08DE690E026ED32E0F2
+:1012700042C021323105F1F02232310541F137C04F
+:1012800082E190E023E433E036C099278130910574
+:1012900041F08230910541F0892B49F5E2EDF2E011
+:1012A00005C0EEEBF2E002C0E2EBF2E0849190E0E8
+:1012B0009F0121C06430D8F4E62FF0E0EE0FFF1F4D
+:1012C000EC5CFE4F2081318189E090E014C06430F5
+:1012D00070F470E0FB01EE0FFF1FE45DFE4F208114
+:1012E0003181FB01E85DFE4F808190E004C080E029
+:1012F00090E020E030E0FA0131832083089580E11E
+:1013000089BD82E189BD09B400FEFDCF8091D8007E
+:101310008F7D8093D8008091E00082608093E00010
+:101320008091E00081FDFCCF0895CF92DF92EF9293
+:10133000FF920F931F93CF93DF93EC018B016A0110
+:101340000E94F80A811133C0C114D10439F0F601AA
+:1013500080819181081B190BC80FD91FE12CF12C3A
+:101360000115110519F18091E80085FD16C08091E5
+:10137000E8008E778093E800C114D10449F0F601AB
+:1013800080819181E80EF91EF182E08285E00FC034
+:101390000E94F80A882321F30AC089918093F10002
+:1013A00001501109FFEFEF1AFF0ADACF80E0DF9159
+:1013B000CF911F910F91FF90EF90DF90CF90089504
+:1013C0002091EE013091EF012617370748F06115A3
+:1013D000710539F42091E8002E772093E80001C0D0
+:1013E000B90140E061157105A9F12091E7012223BF
+:1013F00009F443C0253009F442C02091E80023FDE0
+:1014000040C02091E80022FD32C02091E80020FF7A
+:10141000E9CF4091F3002091F20030E0342BFC0141
+:10142000CF016115710559F02830310540F48191E3
+:101430008093F100615071092F5F3F4FF1CF41E080
+:101440002830310509F040E02091E8002E77209304
+:10145000E800C8CF4111C9CF0AC08091E7018823B5
+:1014600061F0853061F08091E80083FD0AC08091D1
+:10147000E80082FFF2CF80E0089582E0089583E0E3
+:10148000089581E008952091EE013091EF01261733
+:10149000370748F06115710539F42091E8002E777F
+:1014A0002093E80001C0B901FC0120E0611571053D
+:1014B00091F18091E701882309F440C0853009F457
+:1014C0003FC08091E80083FD3DC08091E80082FD2F
+:1014D0002FC08091E80080FFE9CF2091F300809138
+:1014E000F20090E0922B6115710559F0883091055A
+:1014F00040F424912093F1003196615071090196D6
+:10150000F2CF21E0089709F020E08091E8008E7783
+:101510008093E800CBCF2111CCCF0AC08091E701A6
+:10152000882361F0853061F08091E80083FD0AC076
+:101530008091E80082FFF2CF80E0089582E0089574
+:1015400083E0089581E00895982F973058F590939F
+:10155000E900981739F07091EC002091ED0050915E
+:10156000F00003C0242F762F50E021FF19C03091E6
+:10157000EB003E7F3093EB003091ED003D7F3093E8
+:10158000ED003091EB0031603093EB007093EC0094
+:101590002093ED005093F0002091EE0027FF07C04C
+:1015A0009F5FD3CF8F708093E90081E0089580E042
+:1015B00008958091E80187FF11C08091E80082FDC5
+:1015C00005C08091E7018111F8CF11C08091E8003A
+:1015D0008B770BC08091E701882349F08091E80068
+:1015E00080FFF8CF8091E8008E778093E80008951F
+:1015F0002091E4003091E50095E64091EC00842FC5
+:10160000817040FF22C08091E80080FD1CC0809165
+:10161000E701882391F0853091F08091EB0085FD02
+:1016200010C04091E4005091E5004217530729F3A0
+:101630009A01915011F784E0089582E0089583E0C3
+:10164000089581E0089580E008954091E80042FF08
+:10165000DECF08950E94980B0E94A00BE0EEF0E010
+:10166000808181608083E8EDF0E080818F778083E6
+:1016700019BCA7EDB0E08C918E7F8C9380818F7E1A
+:1016800080831092E60108950F931F93CF93DF9309
+:101690000E94980B0E94A00BC8EDD0E088818F7744
+:1016A000888388818068888388818F7D888319BC3E
+:1016B0001092E7011092E3011092E5011092E4010B
+:1016C00000EE10E0F80180818B7F8083888181604B
+:1016D000888342E060E080E00E94A40AE1EEF0E04E
+:1016E00080818E7F8083E2EEF0E080818160808364
+:1016F000808188608083F80180818E7F80838881EB
+:1017000080618883DF91CF911F910F910895E8ED5B
+:10171000F0E080818F7E8083E7EDF0E08081816062
+:10172000808384E082BF81E08093E6010C94440BC7
+:10173000E8EDF0E080818E7F80831092E2000895D2
+:101740001092DA001092E10008951F920F920FB6E6
+:101750000F9211242F933F934F935F936F937F9337
+:101760008F939F93AF93BF93EF93FF938091E1008B
+:1017700082FF0BC08091E20082FF07C08091E100F0
+:101780008B7F8093E1000E940C0E8091DA0080FF35
+:101790001FC08091D80080FF1BC08091DA008E7F2F
+:1017A0008093DA008091D90080FF0DC080E189BD6F
+:1017B00082E189BD09B400FEFDCF81E08093E7019D
+:1017C0000E94100805C019BC1092E7010E941E0873
+:1017D0008091E10080FF19C08091E20080FF15C078
+:1017E0008091E2008E7F8093E2008091E200806130
+:1017F0008093E2008091D80080628093D80019BC69
+:1018000085E08093E7010E9422088091E10084FF37
+:1018100030C08091E20084FF2CC080E189BD82E16C
+:1018200089BD09B400FEFDCF8091D8008F7D8093E3
+:10183000D8008091E1008F7E8093E1008091E200EA
+:101840008F7E8093E2008091E20081608093E200CD
+:101850008091E301882311F084E007C08091E300C8
+:1018600087FD02C081E001C083E08093E7010E9410
+:1018700023088091E10083FF29C08091E20083FF6B
+:1018800025C08091E100877F8093E10082E0809312
+:10189000E7011092E3018091E1008E7F8093E100E7
+:1018A0008091E2008E7F8093E2008091E20080616F
+:1018B0008093E20042E060E080E00E94A40A809110
+:1018C000F00088608093F0000E942108FF91EF9162
+:1018D000BF91AF919F918F917F916F915F914F9148
+:1018E0003F912F910F900FBE0F901F9018951F9250
+:1018F0000F920FB60F9211242F933F934F935F9344
+:101900006F937F938F939F93AF93BF93CF93DF9307
+:10191000EF93FF93C091E900CF708091EC00D82F36
+:10192000D17080FDD0E81092E9008091F000877FAF
+:101930008093F00078940E94BB0C1092E900809193
+:10194000F00088608093F000CD2BCF70C093E90049
+:10195000FF91EF91DF91CF91BF91AF919F918F91C7
+:101960007F916F915F914F913F912F910F900FBE9B
+:101970000F901F9018951F93CF93DF93CDB7DEB7CD
+:10198000AA970FB6F894DEBF0FBECDBFE8EEF1E028
+:1019900088E08E0F9091F10091938E13FBCF0E94FF
+:1019A00039088091E80083FF1FC18091E801909180
+:1019B000E901492F50E04A30510508F015C1FA01FC
+:1019C000EA5AFF4F0C945D1F803881F0823809F08D
+:1019D0000BC18091EC018F708093E9008091EB0046
+:1019E00085FB882780F91092E90006C08091E40108
+:1019F0009091E501911182609091E800977F90931A
+:101A0000E8008093F1001092F100C8C0282F2D7FCC
+:101A100009F0EAC0882319F0823061F0E5C08091B6
+:101A2000EA01813009F0E0C0933009F080E0809352
+:101A3000E5012BC08091EA01811127C08091EC0162
+:101A40008F7009F4D1C08093E9002091EB0020FF52
+:101A50001CC0933021F48091EB00806214C09091FF
+:101A6000EB0090619093EB0021E030E0A90102C00F
+:101A7000440F551F8A95E2F74093EA001092EA005E
+:101A80008091EB0088608093EB001092E9008091D8
+:101A9000E800877F86C08111A7C01091EA011F77F7
+:101AA0008091E3008078812B8093E3008091E800AF
+:101AB000877F8093E8000E94D90A8091E80080FF28
+:101AC000FCCF8091E30080688093E300111102C095
+:101AD00082E001C083E08093E70186C080588230B5
+:101AE00008F082C08091EA019091EB018C3D53E0B7
+:101AF000950779F583E08A838AE289834FB7F89462
+:101B0000DE01139620E03EE051E2E32FF0E0509337
+:101B10005700E49120FF03C0E295EF703F5FEF7044
+:101B20008E2F90E0EA3010F0C79601C0C0968D93DA
+:101B30009D932F5F243149F74FBF8091E800877F45
+:101B40008093E8006AE270E0CE0101960E94E0090D
+:101B500014C0AE014F5F5F4F6091EC010E942709F6
+:101B6000BC01009709F440C09091E800977F9093E2
+:101B7000E80089819A810E94430A8091E8008B776E
+:101B80008093E80031C0803879F58091E800877F44
+:101B90008093E8008091E3018093F1008091E80058
+:101BA0008E778093E8000E94D90A1EC081111CC064
+:101BB0009091EA019230C0F48091E800877F809391
+:101BC000E8009093E3010E94D90A8091E30181111A
+:101BD00006C08091E30087FD02C081E001C084E07F
+:101BE0008093E7010E9425088091E80083FF0AC0E6
+:101BF0008091E800877F8093E8008091EB0080620D
+:101C00008093EB00AA960FB6F894DEBF0FBECDBF4F
+:101C1000DF91CF911F9108950895CF938091E701AF
+:101C20008823A1F0C091E900CF709091EC00892F3A
+:101C3000817090FD80E8C82B1092E9008091E80047
+:101C400083FD0E94BB0CCF70C093E900CF91089533
+:101C500090937301809372010895E0917201F09165
+:101C60007301309721F00190F081E02D099480E01C
+:101C70000895E0917201F0917301309721F0028094
+:101C8000F381E02D09940895E0917201F0917301C0
+:101C9000309721F00480F581E02D0994089520917A
+:101CA0007001309171018217930771F09093710167
+:101CB00080937001E0917201F0917301309721F0EF
+:101CC0000680F781E02D0994089520916E013091EE
+:101CD0006F018217930771F090936F0180936E01EB
+:101CE000E0917201F0917301309721F00084F18549
+:101CF000E02D0994089508950C947B0E0E94C41958
+:101D00000E945E060C948E1A5F926F927F928F9261
+:101D10009F92AF92BF92CF92DF92EF92FF920F937A
+:101D20001F93CF93DF9300D000D01F92CDB7DEB7C3
+:101D30000E94A3069FE7C92E91E0D92E04E010E08F
+:101D4000AA24A394B12C502E802F0E9411074C017D
+:101D5000F601729062906F01682679266114710411
+:101D6000A1F40150110978F78FEF89838A831B82D0
+:101D70000E94CD198160782F9D838C8349815A817F
+:101D80006B818D810E94340F38C08091D40181FD18
+:101D90000E941A072DE030E07501022E02C0EE0C01
+:101DA000FF1C0A94E2F7C70186219721892B09F1CC
+:101DB00029835A828E209F2091E0892809F490E09F
+:101DC0009B830E94CD198160782F9D838C834981EC
+:101DD0005A816B818D810E94340F000F111FF80111
+:101DE000EB58FE4F80819181E826F926F182E0824E
+:101DF00004C02150310980F6B4CF0E94751D1091A6
+:101E000074010E942D0E1817D1F00E942D0E8093A0
+:101E100074010F900F900F900F900F90DF91CF9162
+:101E20001F910F91FF90EF90DF90CF90BF90AF90F8
+:101E30009F908F907F906F905F900C9448060F90CA
+:101E40000F900F900F900F90DF91CF911F910F91F6
+:101E5000FF90EF90DF90CF90BF90AF909F908F90CA
+:101E60007F906F905F900895CF93DF93CDB7DEB7EB
+:101E70002B970FB6F894DEBF0FBECDBF4F835887A8
+:101E800069877A878B87DE01119686E0FD011192C2
+:101E90008A95E9F785E0FE01379601900D928A95C3
+:101EA000E1F749815A816B817C818D819E810E94FD
+:101EB0007A152B960FB6F894DEBF0FBECDBFDF911B
+:101EC000CF910895882309F4B9C0823859F40E944B
+:101ED0002D0E81FDB3C089E30E9454180E94211980
+:101EE00089E30CC0833871F40E942D0E80FDA6C0DA
+:101EF00083E50E9454180E94211983E50E949618D8
+:101F00000C942119843859F40E942D0E82FD96C03C
+:101F100087E40E9454180E94211987E4EFCF9CEFB8
+:101F2000980F913A18F40E945418EACF90E2980F53
+:101F3000983050F4877091E001C0990F8A95EAF7C4
+:101F4000892F0E94DA18DCCF9BE5980F933070F44C
+:101F5000853A29F0863A31F083E890E005C081E8BF
+:101F600090E002C082E890E00C944F0E98E5980F44
+:101F7000933108F063C0883A39F1893A41F18A3ADD
+:101F800049F18B3A51F18C3A59F18D3A61F1803B2C
+:101F900069F18E3A71F18F3A79F1813B81F1823B9F
+:101FA00089F1833B91F1843B99F1853BA1F1863B1B
+:101FB000A9F1873BB1F1883BB9F1893BC1F18A3B7B
+:101FC000C9F180E090E038C082EE90E035C089EE43
+:101FD00090E032C08AEE90E02FC085EB90E02CC0FC
+:101FE00086EB90E029C087EB90E026C08CEC90E077
+:101FF00023C08DEC90E020C083E891E01DC08AE80A
+:1020000091E01AC082E991E017C084E991E014C020
+:1020100081E292E011C083E292E00EC084E292E09D
+:102020000BC085E292E008C086E292E005C087E23C
+:1020300092E002C08AE292E00C94650E0895882333
+:1020400009F44BC0823859F40E942D0E81FF45C01F
+:1020500089E30E9454180E94211989E30CC0833837
+:1020600071F40E942D0E80FF38C083E50E94541841
+:102070000E94211983E50E9496180C942119843836
+:1020800059F40E942D0E82FF28C087E40E94541844
+:102090000E94211987E4EFCF9CEF980F913A58F3F3
+:1020A00090E2980F983050F4877091E001C0990F3A
+:1020B0008A95EAF7892F0E94E018DFCF9BE5980FF9
+:1020C000933020F480E090E00C944F0E885A8331D6
+:1020D00020F480E090E00C94650E0895882321F0B0
+:1020E0000E94DA180C9421190895882321F00E9487
+:1020F000E0180C94211908957F928F929F92AF92CD
+:10210000BF92CF92DF92EF92FF920F931F93CF93E4
+:10211000DF931F92CDB7DEB77C01C62E772EFC0170
+:10212000058102950F70128111110E94F7180E940B
+:102130004D18882379F0112369F080E28C0D8830E6
+:1021400048F082E00E9436180E944D1891E0D82E87
+:10215000D92601C0D12CE72DE295EF70F0E0E05ACE
+:10216000FF4F0C945D1F872D807F072D0F708823F4
+:1021700011F00295007F112389F0002309F498C122
+:1021800080E28C0D883020F4802F0E94DA1803C082
+:10219000802F0E94EA180E9421198AC18C2D0E946A
+:1021A0001F10002309F49DC180E28C0D883020F4BB
+:1021B000802F0E94E01803C0802F0E94F0180E9418
+:1021C00021198FC1872D807F972D9F70803211F448
+:1021D000892F03C0892F8295807FCC2021F0F1E0E8
+:1021E000CF16A1F01DC0112339F0002319F10130E1
+:1021F00009F50E940A1975C1002319F0013009F48C
+:1022000070C189830E940D19898110C1112321F0A9
+:10221000063008F066C10EC0053008F062C106C184
+:10222000112359F0002331F0F701958190FF40C14F
+:102230009F7095830E946E1054C1002309F4F6C06C
+:102240003DC1872D86958695837090E0009719F0A3
+:10225000019761F046C1112321F08C2D972D9370C9
+:1022600002C080E090E00E944F0E3BC1112321F09C
+:102270008C2D972D937002C080E090E00E94650E37
+:1022800030C18C2D112319F00E947D1C02C00E94C8
+:10229000E51C0E946A1D25C1872D837009F052C07C
+:1022A00011111FC18C2D829586958770880F880F1C
+:1022B0009C2D9F70892E912CA12CB12C082E04C02E
+:1022C000880C991CAA1CBB1C0A94D2F7C4FE14C02B
+:1022D0000FE010E020E030E0B901A80104C0440F95
+:1022E000551F661F771F8A95D2F7CB01BA016095FB
+:1022F00070958095909503C060E070E0CB01272D2C
+:1023000026952695237030E02230310569F0233080
+:10231000310589F0682979298A299B2921303105DD
+:1023200071F00E94C216DDC0682979298A299B298B
+:102330000E94DE16D6C00E94C216C501B4010E94DA
+:10234000A616CFC0112319F0872D817001C0869584
+:10235000882309F4C6C08C2D829586958770880FD6
+:10236000880F9C2D9F70892E912CA12CB12C082EAA
+:1023700004C0880C991CAA1CBB1C0A94D2F7C4FE8A
+:1023800014C00FE010E020E030E0B901A80104C063
+:10239000440F551F661F771F8A95D2F7CB01BA01EC
+:1023A000609570958095909503C060E070E0CB01DA
+:1023B000272D269526952370422F50E04230510557
+:1023C00069F04330510589F0682979298A299B29C8
+:1023D0004130510571F00E949C1783C0682979290A
+:1023E0008A299B290E94B8177CC00E949C17C501AE
+:1023F000B4010E94801775C08C2D90E0FC01E05E56
+:10240000F109E531F10508F04FC0E059FF4F0C9498
+:102410005D1F0C2D0F70872D8F71112321F00E94ED
+:102420001917802F07CF0E943A17802F0E9475102E
+:1024300058C0112341F0053008F053C0872D8F712B
+:102440000E945F174EC0063008F04BC0F7CF112333
+:1024500039F0872D8F710E94191743C01123C9F3DA
+:10246000872D8F710E943A173CC0112329F0872DC8
+:102470008F710E94041735C00E94FA1632C01123D2
+:1024800051F0172D1F71812F0E94191763E0812FC2
+:102490000E942D1826C081E00E943618023008F1F3
+:1024A00082E00E9436181DC0112331F0002389F20A
+:1024B0008C2D0E94620F15C0002391F28C2D0E947A
+:1024C0001F100FC0472D4F706C2DC7010E94800256
+:1024D0000E941E1606C0472D4F706C2DC7010E942A
+:1024E0005803DD20F9F00E94291880FD1BC0F70178
+:1024F00012820E9423180E941917C7010E94A1127C
+:102500000E9423180F90DF91CF911F910F91FF90A0
+:10251000EF90DF90CF90BF90AF909F908F907F9083
+:102520000C943A170F90DF91CF911F910F91FF906C
+:10253000EF90DF90CF90BF90AF909F908F907F9063
+:1025400008950F931F93CF93DF93EC0188819981B6
+:102550002B813C81232BB9F09F3F11F48F3F99F0E1
+:10256000CE010E94AC02882371F0688179818A8152
+:102570000E941F188C010E94D4170E949B16B8015C
+:10258000CE010E947C10DF91CF911F910F91089591
+:102590000E94F7180E9407190E94CC180E94211966
+:1025A0000E941B1E0E946A1D80E090E00E944F0E58
+:1025B00080E090E00C94650E0E94E7180C94C8121D
+:1025C0000E941418292F22952F7030E02C303105ED
+:1025D0004CF42A3031056CF4225031092230310597
+:1025E000A8F407C02C30310569F02F30310551F0C7
+:1025F0000DC0803F69F018F4803E40F409C0843F6C
+:1026000029F406C093FB882780F9089580E0089597
+:1026100081E00895CF93DF9300D000D01F92CDB713
+:10262000DEB70F900F900F900F900F90DF91CF912A
+:102630000895CF93DF9300D000D000D0CDB7DEB7A0
+:1026400026960FB6F894DEBF0FBECDBFDF91CF91B7
+:1026500008951F93CF93DF93C0917F0116E080917F
+:102660008001C81799F0D0E01C9FF0011D9FF00D6C
+:102670001124EF57FE4F4081518162817381848123
+:1026800095810E9419132196C770E9CFDF91CF91F0
+:102690001F9108954091B1015091B2016091B30131
+:1026A0007091B4018091B5019091B6010C94191309
+:1026B0008091B60182958F7009F054C08091B3016A
+:1026C000882309F44FC080917F01A091800160911F
+:1026D000B1017091B2014091B4015091B501B6E0E1
+:1026E0008A1709F43FC090E041155105C1F17F3FC1
+:1026F00011F46F3FA1F1B89FF001B99FF00D1124C3
+:10270000EF57FE4F218172132AC02081621327C028
+:102710002281211124C0238134812417350710F42C
+:1027200021503109241B350B283C3105C0F4209180
+:10273000B6012F7020612093B60126E0289FF0019A
+:10274000299FF00D1124EA57FE4F80818F70806120
+:10275000808381EB91E00E94A1120C9429130196D1
+:102760008770BECF0895CF92DF92EF92FF920F93C2
+:102770001F93CF93DF93CDB7DEB762970FB6F89470
+:10278000DEBF0FBECDBF8C0185E0F801DE011D96D6
+:1027900001900D928A95E1F7D8014C9111965C91C8
+:1027A000119712966C9112971396CD90DC90149716
+:1027B0003091B1017091B2018091B4019091B50155
+:1027C000009709F46BC17F3F19F43F3F09F466C1DC
+:1027D000E090B301EE2009F4C0C02091B601C81604
+:1027E000D90628F0F601E81BF90BCF0104C080954B
+:1027F00090958C0D9D1DFF24F394883C910578F0F5
+:10280000F12C207F09F0C6C07C2DD98AC88A89891D
+:102810000E940A1381EB91E00E94A112B1C0822FA5
+:10282000807F09F046C0751314C0341312C06111C3
+:1028300010C02F7020612093B6010E944A1381EBD3
+:1028400091E00E94A1128091B601D80115968C9357
+:102850002EC0CD2819F15F3F11F44F3FF9F0F62E4D
+:1028600061111CC080917F012091800136E08217A8
+:1028700009F45AC090E0389FF001399FF00D1124FF
+:10288000EF57FE4F7181571306C07081471303C085
+:102890007281711103C001968770E9CFF62E66230D
+:1028A00009F418C18091B60181608093B601F12CC2
+:1028B00011C1751308C0341306C0611104C08091A2
+:1028C000B601D801C3C04D875E878D859E856A8B12
+:1028D0000E94E0126A898823E1F16623D1F12091F8
+:1028E000B601822F82958F7090E0029774F08091EC
+:1028F000B1019091B20198878F831986DB86CA86D1
+:102900002C87CE0107960E94A11286E0F801A1EB68
+:10291000B1E001900D928A95E1F70E9458130E9450
+:102920004A13FF24F394D6C04D875E878D859E851C
+:102930000E941418292F22952F7030E02230310583
+:102940000CF0BCC09F7009F0B6C0805E883008F4FF
+:10295000C1C0C8010E94A112E4CFC816D90608F46C
+:1029600053C0F601E81BF90BCF01883C910508F430
+:1029700050C0F12C7C2DD98AC88A89890E940A13FB
+:10298000E1EBF1E086E0DF011D928A95E9F70E9414
+:102990004A13A0C0751314C0341312C0611110C0C3
+:1029A0008091B601F8018583C8010E94A11286E0DA
+:1029B000E1EBF1E0DF011D928A95E9F7FE2C8AC078
+:1029C0004D875E878D859E856A8B0E94E0126A899D
+:1029D000882309F4BECF662309F4BBCF2091B6014A
+:1029E000822F82958F7090E002970CF48ECF8091A9
+:1029F000B1019091B2019A8389831B82DD82CC82DE
+:102A00002E83CE0101967FCF809590958C0D9D1DD4
+:102A1000ACCFF62E662309F49CCF75132EC0341369
+:102A20002CC02091B60120FD1FC0822F82958F708F
+:102A3000D9F0D80115962C9315978F3049F08F5FF8
+:102A4000982F9295907F822F8F70892B15968C935B
+:102A5000C8010E94A11286E0F801A1EBB1E001904B
+:102A60000D928A95E1F793CF86E0F801A1EBB1E0F2
+:102A700001900D928A95E1F72DC04D875E878D8577
+:102A80009E850E94E012811140CF8091B601816045
+:102A90008093B601C8010E94A1121CC0662309F4EC
+:102AA00058CF4D875E878D859E850E94E0128823D2
+:102AB00009F44FCF2ACF811148CF0CC02430310503
+:102AC0000CF047CF9F7009F440CFF8019581907FBB
+:102AD00009F03BCF8F2D62960FB6F894DEBF0FBE84
+:102AE000CDBFDF91CF911F910F91FF90EF90DF90BD
+:102AF000CF9008951F93CF93DF93CDB7DEB72C9778
+:102B00000FB6F894DEBF0FBECDBF4F8358876987DD
+:102B10007A878B879C87CE0107960E94B313882300
+:102B200069F08F8198852A853B85232BF1F19F3FA2
+:102B300009F063C08F3F09F060C037C086E0FE0136
+:102B40003796DE01119601900D928A95E1F76F811B
+:102B50007885EA85FB85309741F17F3F11F46F3F1F
+:102B600021F12091800130E0C901019687709927F9
+:102B700040917F0150E08417950709F447C06983AD
+:102B80007A83FD83EC8396E0929FD001939FB00DF2
+:102B90001124AF57BE4FFE01319601900D929A95C8
+:102BA000E1F7809380010E94291316E080917F0154
+:102BB000909180018917C1F1189FC00111248F578E
+:102BC0009E4F0E94B313882379F1E0917F011E9FED
+:102BD000F0011124EF57FE4F4081518162817381D2
+:102BE000848195810E94191380917F0190E0019664
+:102BF0008770992780937F01D9CF4F815885698548
+:102C00007A858B859C850E941913CFCF0E94DC1298
+:102C10001092800110927F01E1EBF1E086E0DF018C
+:102C20001D928A95E9F7C1CF2C960FB6F894DEBFB6
+:102C30000FBECDBFDF91CF911F910895EF92FF920C
+:102C40000F931F93CF93DF938C01009709F46CC00F
+:102C5000F12CEE24E394E8012196F8018491843765
+:102C600040F4843008F051C0813081F0823019F195
+:102C70005BC0853709F444C0A8F19CE7980F9037F2
+:102C800008F052C08F770E941F1041C00E5F1F4F87
+:102C9000FE01C49180E28C0F883048F4C7708E2DFD
+:102CA00001C0880FCA95EAF70E94FA1814C08C2F49
+:102CB0000E94620F2DC00E5F1F4FFE01C49180E283
+:102CC0008C0F883058F4C7708E2D01C0880FCA95BC
+:102CD000EAF70E9400190E9421191AC08C2F0E9445
+:102CE0001F1016C00E5F1F4FFE01C491CC2381F050
+:102CF0008FE99FE00197F1F700C00000C150F6CFC7
+:102D00000E5F1F4FFE01F49003C00E94620F8E0100
+:102D10008F2D882309F49FCFEFE9FFE03197F1F77A
+:102D200000C000008150F5CFDF91CF911F910F912E
+:102D3000FF90EF90089508956093BB017093BC01DC
+:102D40008093BD019093BE010C94C8120F931F9302
+:102D50000091BB011091BC012091BD013091BE01D9
+:102D6000DC01CB01802B912BA22BB32B8093BB01D9
+:102D70009093BC01A093BD01B093BE011F910F9130
+:102D80000C94C8120F931F930091BB011091BC01CA
+:102D90002091BD013091BE01DC01CB018023912344
+:102DA000A223B3238093BB019093BC01A093BD01E8
+:102DB000B093BE011F910F910C94C8120F931F93F3
+:102DC0000091BB011091BC012091BD013091BE0169
+:102DD000DC01CB0180279127A227B3278093BB0179
+:102DE0009093BC01A093BD01B093BE011F910F91C0
+:102DF0000C94C8121092B7011092B8011092B90148
+:102E00001092BA010C94C81241E050E060E070E00A
+:102E100004C0440F551F661F771F8A95D2F7409351
+:102E2000B7015093B8016093B9017093BA010C9443
+:102E3000C81241E050E060E070E004C0440F551F4C
+:102E4000661F771F8A95D2F78091B7019091B801DC
+:102E5000A091B901B091BA01482B592B6A2B7B2B59
+:102E60004093B7015093B8016093B9017093BA01D0
+:102E70000C94C81241E050E060E070E004C0440FE0
+:102E8000551F661F771F8A95D2F74095509560951C
+:102E900070958091B7019091B801A091B901B0915E
+:102EA000BA01482359236A237B234093B7015093E7
+:102EB000B8016093B9017093BA010C94C81241E053
+:102EC00050E060E070E004C0440F551F661F771F9C
+:102ED0008A95D2F78091B7019091B801A091B9017C
+:102EE000B091BA01482759276A277B274093B70139
+:102EF0005093B8016093B9017093BA010C94C81251
+:102F00000F931F930091B7011091B8012091B9015F
+:102F10003091BA01DC01CB01802B912BA22BB32B7A
+:102F20008093B7019093B801A093B901B093BA010F
+:102F30001F910F910C94C8120F931F930091B7012A
+:102F40001091B8012091B9013091BA01DC01CB0197
+:102F500080239123A223B3238093B7019093B801D8
+:102F6000A093B901B093BA011F910F910C94C812AC
+:102F70000F931F930091B7011091B8012091B901EF
+:102F80003091BA01DC01CB0180279127A227B3271A
+:102F90008093B7019093B801A093B901B093BA019F
+:102FA0001F910F910C94C8120895CF92DF92EF9267
+:102FB000FF920F931F93CF93DF938C01C090BB01BF
+:102FC000D090BC01E090BD01F090BE018091B701AE
+:102FD0009091B801A091B901B091BA01C82AD92A3B
+:102FE000EA2AFB2ACFE1D0E0D701C6010C2E04C0AB
+:102FF000B695A795979587950A94D2F780FF06C056
+:10300000B8018C2F0E94AE05019721F4219760F73B
+:1030100080E001C08C2FDF91CF911F910F91FF9025
+:10302000EF90DF90CF900895CF93DF93EC010E9453
+:10303000D517BE010E94AE05DF91CF910895CB0157
+:103040000E94141808958091BF01859585958595F6
+:1030500008958091BF018770089598E0899F90013D
+:103060001124262B2093BF010C9419172091BF0126
+:10307000809582238093BF01982F977069F430E088
+:10308000482F552747FD50952417350729F085957A
+:10309000859585950C943A1708959091BF01977086
+:1030A00081E009F480E0089590910B01992321F0CB
+:1030B00090910C01911109C020910D0130910E01E8
+:1030C000F90132969FEF40E01FC0982F9695969594
+:1030D00096959F3050F5E0910D01F0910E01E90FAA
+:1030E000F11D877021E030E0A90102C0440F551F97
+:1030F0008A95E2F7CA019181892B818308959F3FC8
+:1031000039F04F5F4E3041F051915813F8CF0DC058
+:103110005111F7CF942FF5CF9F3F39F0F901E90F07
+:10312000F11D97FDFA9582830895089590910B0102
+:10313000992321F090910C01911109C020910D016A
+:1031400030910E01F9013296205F3F4F1FC0982F3A
+:103150009695969596959F30F0F4E0910D01F0913B
+:103160000E01E90FF11D877021E030E0A90102C0D6
+:10317000440F551F8A95E2F7CA01809591818923F2
+:10318000818308953196E217F30729F0908198130F
+:10319000F9CF1082F7CF089581E090E0E0910D0122
+:1031A000F0910E01E80FF91F108201968031910510
+:1031B000A9F708959091D301892B8093D3010895A5
+:1031C00080959091D30189238093D3010895109223
+:1031D000D30108959091D201892B8093D201089553
+:1031E00080959091D20189238093D2010895109205
+:1031F000D20108959091D101892B8093D101089536
+:1032000080959091D10189238093D10108951092E6
+:10321000D10108958093C00108951092C0010895CE
+:1032200080910D0190910E01FC0131969C01205F6F
+:103230003F4F80E0919191118F5FE217F307D1F733
+:103240000895E0910D01F0910E018091D3018083EA
+:10325000E0910D01F0910E0190818091D201892BB6
+:103260008083E0910D01F0910E0190818091D10158
+:10327000892B80838091C001882361F0E0910D014A
+:10328000F0910E019081892B80830E941019811189
+:103290001092C00180910D0190910E010C94390E95
+:1032A00020E0009739F0AC01415051098423952367
+:1032B0002F5FF7CF822F08958091E701843021F1AD
+:1032C0001092D50120E488E190E00FB6F894A8951B
+:1032D000809360000FBE2093600080E00E9448064B
+:1032E00083B7817F846083BF83B7816083BF789415
+:1032F000889583B78E7F83BF88E10FB6F89480935B
+:103300006000109260000FBE0895089508950E9415
+:1033100085190E94A3060E9486190E941B0791E04E
+:10332000811101C090E0892F08950E94DC120E9453
+:103330002D0E0C9448061F920F920FB60F92112477
+:103340008F939F93AF93BF938091D501811113C049
+:103350008091D6019091D701A091D801B091D90167
+:103360004196A11DB11D8093D6019093D701A093E2
+:10337000D801B093D901BF91AF919F918F910F90D8
+:103380000FBE0F901F90189582E084BD93E095BD0D
+:103390009AEF97BD80936E0008952FB7F8948091AF
+:1033A000D6019091D701A091D801B091D9012FBF3A
+:1033B0000895CF92DF92EF92FF920F931F932FB752
+:1033C000F8944091D6015091D7016091D801709145
+:1033D000D9012FBF6A017B01EE24FF248C0120E07C
+:1033E00030E0C016D106E206F30610F44150510950
+:1033F0009A01281B390BC9011F910F91FF90EF9083
+:10340000DF90CF9008951F920F920FB60F92112464
+:103410008F939F93AF93BF938091D6019091D701E3
+:10342000A091D801B091D9010196A11DB11D809341
+:10343000D6019093D701A093D801B093D901BF9141
+:10344000AF919F918F910F900FBE0F901F90189585
+:103450000E942A0BF8942FEF87EA91E621508040D2
+:103460009040E1F700C0000087E090EBDC01809322
+:10347000F1019093F201A093F301B093F4019CE069
+:1034800088E10FB6F894A895809360000FBE9093E2
+:103490006000FFCFCF92DF92EF92FF920F931F93C6
+:1034A000CF93DF93D82FC4E0EE24E394F12C8C2F3C
+:1034B0000E9411076C010DE010E09701002E02C080
+:1034C000220F331F0A94E2F72C213D21232B49F0D0
+:1034D000602F7C2F80E00E945903D81302C081E046
+:1034E00006C00150110948F7C15008F780E0DF918C
+:1034F000CF911F910F91FF90EF90DF90CF900895A3
+:10350000CF93C82F8CE20E944A1A882321F08C2F77
+:10351000CF910C944A1A80E0CF910895CF930E94E6
+:10352000D51B811102C00E94BB1BC5E6C15049F0EA
+:103530000E94A3068FE39CE90197F1F700C0000009
+:10354000F5CF89E20E94801A811113C18AE20E949C
+:10355000801A81110E94BB1B85E00E94801A811194
+:103560000E94281A0E94E01B8093D40187E00E94E9
+:10357000801A8823A9F18BE10E94801A882351F0D8
+:103580008091D40181FB222720F991E0922790FBC2
+:1035900081F90EC08EE00E94801A882361F080912C
+:1035A000D40182FB222720F991E0922790FB82F937
+:1035B0008093D40115C080E10E94801A9091D401BB
+:1035C000882341F093FB222720F981E0822780FBAA
+:1035D00093F904C0892F809580FB90F99093D401D2
+:1035E0008091D4010E94E41B0E94F21B8093F001A1
+:1035F00080EE0E94801A882341F08091F001982F7C
+:10360000909590FB80F98093F00189E30E94801AE5
+:10361000882359F08091F00181FB222720F991E065
+:10362000922790FB81F98093F00182EE0E94801A2C
+:10363000882359F08091F00182FB222720F991E044
+:10364000922790FB82F98093F00186EE0E94801A07
+:10365000882359F08091F00183FB222720F991E023
+:10366000922790FB83F98093F00183EE0E94801AE9
+:10367000882359F08091F00184FB222720F991E002
+:10368000922790FB84F98093F00185E30E94801AD1
+:10369000882359F08091F00185FB222720F991E0E1
+:1036A000922790FB85F98093F00181E30E94801AB4
+:1036B000882359F08091F00186FB222720F991E0C0
+:1036C000922790FB86F98093F00181E10E94801A95
+:1036D000882359F08091F00187FB222720F991E09F
+:1036E000922790FB87F98093F0018091F0010E946E
+:1036F000F61B8091F00187FB882780F980930C01ED
+:1037000087E20E94801AC82F8EE10E94801A8111E0
+:10371000C2608FE10E94801A8111C46080E20E9421
+:10372000801A8111C86081E20E94801A8111C061F3
+:1037300082E20E94801A8111C06283E20E94801A94
+:103740008111C06484E20E94801A882311F0C0684D
+:1037500002C0CC2329F08C2F0E94ED1B6C2F03C0DC
+:103760000E94E91B682F70E080E090E0CF910C94FC
+:103770009C16CF9108956DEE7EEF80E090E00E9460
+:10378000971F60E082E090E00E94851F60E083E088
+:1037900090E00E94851F60E084E090E00E94851F19
+:1037A00060E085E090E00C94851F80E090E00E944E
+:1037B0007F1F21E08D3E9E4F09F020E0822F08956B
+:1037C00082E090E00C94771F682F82E090E00C94E8
+:1037D000851F83E090E00C94771F682F83E090E0D2
+:1037E0000C94851F84E090E00C94771F682F84E090
+:1037F00090E00C94851F8091DC0180FF0BC06091EC
+:10380000120185E0689FB001112475956795759543
+:1038100067952BC081FF09C06091120185E0689F08
+:10382000B00111247595679520C082FF07C0609193
+:10383000120185E0689FB001112417C09091DD014D
+:103840009923D1F060911101961788F72091120108
+:1038500085E0289F90011124929FA001939F500D15
+:10386000112470E0CA010E94491F6038710540F4BC
+:103870006115710539F002C065E070E0862F08958A
+:103880008FE7089581E008958091DC0180FF08C0F2
+:103890006091100170E0759567957595679521C0E9
+:1038A00081FF06C06091100170E07595679519C0A1
+:1038B00082FF04C06091100170E010C09091DD01A2
+:1038C0009923C1F060910F019617A0F78091100124
+:1038D000899FC001112470E00E94491F6038710562
+:1038E00028F46115710521F0862F08958FE708955A
+:1038F00081E0089561E070E0F4CF803F21F40E9400
+:10390000FB1B819504C0813F29F40E94FB1B80931F
+:10391000E0010895823F21F40E94FB1B819504C0C1
+:10392000833F29F40E94FB1B8093DF010895893FA8
+:1039300019F40E94441C05C08A3F31F40E94441CC3
+:1039400081958093E10108958B3F21F40E94441CEE
+:10395000819504C08C3F29F40E94441C8093E201AD
+:103960000895843F21F48091DE01816017C0853F76
+:1039700021F48091DE01826011C0863F21F48091A4
+:10398000DE0184600BC0873F21F48091DE018860F6
+:1039900005C0883F31F48091DE0180618093DE01B3
+:1039A00008958D3F21F48091DC0181600BC08E3F32
+:1039B00021F48091DC01826005C08F3F29F4809161
+:1039C000DC0184608093DC010895803F39F48091AC
+:1039D000E00187FF6CC01092E00169C0813F29F4CB
+:1039E0008091E0011816BCF362C09091DF01823F24
+:1039F00029F497FF5CC01092DF0159C0833F19F48E
+:103A00001916CCF354C0893F41F48091E101181696
+:103A10000CF04DC01092E1014AC08A3F29F4809118
+:103A2000E10187FF44C0F6CF8B3F39F48091E2017A
+:103A300087FF3DC01092E2013AC08C3F29F480918B
+:103A4000E2011816BCF333C0843F21F48091DE01FB
+:103A50008E7F17C0853F21F48091DE018D7F11C0DC
+:103A6000863F21F48091DE018B7F0BC0873F21F4DC
+:103A70008091DE01877F05C0883F31F48091DE01AF
+:103A80008F7E8093DE0113C08D3F21F48091DC0195
+:103A90008E7F0BC08E3F21F48091DC018D7F05C0AD
+:103AA0008F3F29F48091DC018B7F8093DC01809132
+:103AB000DF0181110EC08091E00181110AC0809167
+:103AC000E101811106C08091E201811102C01092D2
+:103AD000DD0108958EED91E00E94440E0E94CD1903
+:103AE0009093DB018093DA0108951F93CF93DF93C6
+:103AF0008091DA019091DB010E94D919AC0190917B
+:103B0000DD01992321F02091130130E006C02091BE
+:103B100014018AE0289F900111244217530708F4EA
+:103B200086C08091DF01C091E001D091E101109148
+:103B3000E201811107C0C11176C0D11174C0111109
+:103B400072C075C09F3F19F09F5F9093DD011816FA
+:103B500024F40E94FB1B8093DF018091DF0187FF2B
+:103B600005C00E94FB1B81958093DF011C1624F485
+:103B70000E94FB1B8093E0018091E00187FF05C05C
+:103B80000E94FB1B81958093E0016091DF01662319
+:103B900039F1C091E001CC2319F1772767FD7095C9
+:103BA000872F972F0E945A1E23E333E343E35FE3FB
+:103BB0000E94BE1E0E94271E6093DF016C2F772794
+:103BC00067FD7095872F972F0E945A1E23E333E3DA
+:103BD00043E35FE30E94BE1E0E94271E6093E00144
+:103BE0001D1624F40E94441C8093E1018091E101A0
+:103BF00087FF05C00E94441C81958093E101111646
+:103C000024F40E94441C8093E2018091E20187FF2A
+:103C100005C00E94441C81958093E201DF91CF9101
+:103C20001F910C946A1D9F3F09F08ECF96CFDF91B4
+:103C3000CF911F910895EEEDF1E085E0DF011D9237
+:103C40008A95E9F71092DD011092DC01089504D005
+:103C50006894B1118DC0089570D088F09F5790F08E
+:103C6000B92F9927B751A0F0D1F0660F771F881FA1
+:103C7000991F1AF0BA95C9F712C0B13081F077D008
+:103C8000B1E0089574C0672F782F8827B85F39F0A6
+:103C9000B93FCCF3869577956795B395D9F73EF400
+:103CA00090958095709561957F4F8F4F9F4F0895A8
+:103CB000E89409C097FB3EF49095809570956195C6
+:103CC0007F4F8F4F9F4F9923A9F0F92F96E9BB277C
+:103CD0009395F695879577956795B795F111F8CFF8
+:103CE000FAF4BB0F11F460FF1BC06F5F7F4F8F4F63
+:103CF0009F4F16C0882311F096E911C0772321F059
+:103D00009EE8872F762F05C0662371F096E8862FF0
+:103D100070E060E02AF09A95660F771F881FDAF747
+:103D2000880F9695879597F9089557FD9058440FF9
+:103D3000551F59F05F3F71F04795880F97FB991F0A
+:103D400061F09F3F79F087950895121613061406C7
+:103D5000551FF2CF4695F1DF08C016161706180654
+:103D6000991FF1CF86957105610508940895E8942F
+:103D7000BB2766277727CB0197F908950BD078C02A
+:103D800069D028F06ED018F0952309F05AC05FC0B2
+:103D90001124EECFCADFA0F3959FD1F3950F50E029
+:103DA000551F629FF001729FBB27F00DB11D639FED
+:103DB000AA27F00DB11DAA1F649F6627B00DA11D93
+:103DC000661F829F2227B00DA11D621F739FB00D39
+:103DD000A11D621F839FA00D611D221F749F3327A9
+:103DE000A00D611D231F849F600D211D822F762F42
+:103DF0006A2F11249F5750408AF0E1F088234AF03F
+:103E0000EE0FFF1FBB1F661F771F881F915050408A
+:103E1000A9F79E3F510570F014C0AACF5F3FECF3A5
+:103E2000983EDCF3869577956795B795F795E79576
+:103E30009F5FC1F7FE2B880F911D9695879597F987
+:103E4000089597F99F6780E870E060E008959FEF1C
+:103E500080EC089500240A94161617061806090621
+:103E6000089500240A9412161306140605060895F0
+:103E7000092E0394000C11F4882352F0BB0F40F478
+:103E8000BF2B11F460FF04C06F5F7F4F8F4F9F4FB8
+:103E9000089597FB072E16F4009407D077FD09D0FC
+:103EA0000E94631F07FC05D03EF4909581959F4FBB
+:103EB0000895709561957F4F0895EE0FFF1F05904F
+:103EC000F491E02D0994AA1BBB1B51E107C0AA1F66
+:103ED000BB1FA617B70710F0A61BB70B881F991FAB
+:103EE0005A95A9F780959095BC01CD010895F9994F
+:103EF000FECF92BD81BDF89A992780B50895A8E1BB
+:103F0000B0E042E050E00C949F1F262FF999FECFBD
+:103F100092BD81BDF89A019700B4021639F01FBA1C
+:103F200020BD0FB6F894FA9AF99A0FBE089501963B
+:103F3000272F0E94861F0C94851FDC01CB01FC01FA
+:103F4000F999FECF06C0F2BDE1BDF89A319600B4F2
+:0E3F50000D9241505040B8F70895F894FFCFFD
+:103F5E00FF3107BF079C07680734070101C101281D
+:103F6E0008140A321E0F1F6C76666349137353438F
+:103F7E0079693309192939593F4D36391104C4036A
+:0C3F8E008E035503E80201031A033303FD
+:00000001FF
diff --git a/keyboard/gh60/keymaps/default/keymap.c b/keyboard/gh60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3622be41b8
--- /dev/null
+++ b/keyboard/gh60/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+#include "gh60.h"
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ KEYMAP(
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
+ CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \
+ LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \
+ LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL),
+ /* 1: fn */
+ KEYMAP(
+ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
+ TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
+ /* 2: arrows */
+ KEYMAP(
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \
+ TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+ [1] = ACTION_LAYER_TOGGLE(2), // toggle arrow overlay
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+//Layer LED indicators
+ uint32_t layer = layer_state;
+
+ if (layer & (1<<1)) {
+ gh60_wasd_leds_on();
+ gh60_fn_led_on();
+ } else {
+ gh60_wasd_leds_off();
+ gh60_fn_led_off();
+ }
+
+ if (layer & (1<<2)) {
+ gh60_poker_leds_on();
+ gh60_esc_led_on();
+ } else {
+ gh60_poker_leds_off();
+ gh60_esc_led_off();
+ }
+
+};
diff --git a/keyboard/gh60/keymaps/hasu.c b/keyboard/gh60/keymaps/hasu.c
deleted file mode 100644
index e6af28585b..0000000000
--- a/keyboard/gh60/keymaps/hasu.c
+++ /dev/null
@@ -1,145 +0,0 @@
-#include "keymap_common.h"
-
-/*
- * Hasu
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap 0: Default Layer
- * ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |-----------------------------------------------------------|
- * |Caps | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Fn4 |Fn4 |Fn1 |
- * `-----------------------------------------------------------'
- */
- KEYMAP_ANSI(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, FN2, QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, FN9, \
- LCTL,LGUI,LALT, SPC, RALT,FN3, FN3, FN0),
- /* Keymap 1: colemak */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, \
- BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, \
- LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
- /* Keymap 2: dvorak */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, \
- TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, \
- CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, \
- LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
- /* Keymap 3: workman */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, \
- BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, \
- LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, FN0),
-
- /* Overlay 4: HHKB mode
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Inser|
- * |-----------------------------------------------------------|
- * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
- * |-----------------------------------------------------------|
- * |Shift | | | | | | +| -|End|PgD|Dow|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |App | |
- * `-----------------------------------------------------------'
- */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
- CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, TRNS,INS, \
- LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, ENT, \
- LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,FN4, TRNS),
- /* Overlay 5: Vi mode (Slash)
- * ,-----------------------------------------------------------.
- * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backsp |
- * |-----------------------------------------------------------|
- * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgU|End| | | | |
- * |-----------------------------------------------------------|
- * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
- * |-----------------------------------------------------------|
- * |Shift | | | | | |Hom|PgD|PgU|End| |Shift |
- * |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
- TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, TRNS,TRNS,TRNS,TRNS, \
- LCTL,TRNS,LEFT,DOWN,RGHT,TRNS,LEFT,DOWN,UP, RGHT,TRNS,TRNS, ENT, \
- LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGDN,PGUP,END, TRNS, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL),
- /* Overlay 6: Mouse mode (Semicolon/App)
- * ,-----------------------------------------------------------.
- * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backsp |
- * |-----------------------------------------------------------|
- * |Tab | | | | | |MwL|MwD|MwU|MwR| | | | |
- * |-----------------------------------------------------------|
- * |Contro| |Ac0|Ac1|Ac1| |McL|McD|McU|McR| | |Return |
- * |-----------------------------------------------------------|
- * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift |
- * |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space | | | | |
- * `-----------------------------------------------------------'
- * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
- */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BSPC, \
- TAB, TRNS,TRNS,TRNS,TRNS,TRNS,WH_L,WH_D,WH_U,WH_R,TRNS,TRNS,TRNS,TRNS, \
- LCTL,TRNS,ACL0,ACL1,ACL2,TRNS,MS_L,MS_D,MS_U,MS_R,TRNS,TRNS, ENT, \
- LSFT,TRNS,TRNS,TRNS,TRNS,BTN3,BTN2,BTN1,BTN4,BTN5,TRNS, RSFT, \
- LCTL,LGUI,LALT, BTN1, TRNS,TRNS,TRNS,RCTL),
- /* Overlay 7: Layout selector
- * ,-----------------------------------------------------------.
- * | Lq| Lc| Ld| Lw| | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | |Lq |Lw | | | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | |Ld | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | |Lc | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- * Lq: set Qwerty layout
- * Lc: set Colemak layout
- * Ld: set Dvorak layout
- * Lw: set Workman layout
- */
- KEYMAP_ANSI(
- FN5, FN6, FN7, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,FN5, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,FN6, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
-};
-
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(4),
- [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH),
- [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN),
- [3] = ACTION_LAYER_MOMENTARY(6),
- [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
- [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
- [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
- [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
- [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
- [9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRV),
-};
diff --git a/keyboard/gh60/keymaps/hhkb.c b/keyboard/gh60/keymaps/hhkb.c
deleted file mode 100644
index ce1b816ecb..0000000000
--- a/keyboard/gh60/keymaps/hhkb.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "keymap_common.h"
-
-/*
- * HHKB Layout
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: Default layer
- * ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
- * |-----------------------------------------------------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
- * |-----------------------------------------------------------|
- * | |Gui |Alt | Space | |Alt |Gui | |
- * `-----------------------------------------------------------'
- */
- KEYMAP_HHKB(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,FN0, \
- NO, LGUI,LALT, SPC, NO, RALT,RGUI,NO),
- /* 1: HHKB Fn layer
- * ,-----------------------------------------------------------.
- * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
- * |-----------------------------------------------------------|
- * | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
- * |-----------------------------------------------------------|
- * | | | | | | | +| -|End|PgD|Dow| | |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- KEYMAP_HHKB(
- PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, TRNS,TRNS, \
- TRNS,VOLD,VOLU,MUTE,EJCT,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, PENT, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN, TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
-};
-
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
diff --git a/keyboard/gh60/keymaps/plain.c b/keyboard/gh60/keymaps/plain.c
deleted file mode 100644
index 3138c18077..0000000000
--- a/keyboard/gh60/keymaps/plain.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "keymap_common.h"
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \
- LSFT,NO, Z, X, C, V, B, N, M, COMM,DOT, SLSH,NO, RSFT, \
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL),
-};
-const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboard/gh60/keymaps/poker.c b/keyboard/gh60/keymaps/poker.c
deleted file mode 100644
index 7a612ee44d..0000000000
--- a/keyboard/gh60/keymaps/poker.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "keymap_common.h"
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 1: colemak */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, \
- BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, \
- LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 2: dvorak */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, \
- TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, \
- CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, \
- LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 3: workman */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, \
- BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, \
- LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 4: Poker with Arrow */
- KEYMAP_ANSI(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
- TRNS,TRNS,TRNS, TRNS, TRNS,LEFT,DOWN,RGHT),
- /* 5: Poker with Esc */
- KEYMAP_ANSI(
- ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
- /* 6: Poker Fn
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |
- * |-----------------------------------------------------------|
- * | |FnQ| Up| | | | | | |Cal| |Hom|Ins|FnL |
- * |-----------------------------------------------------------|
- * | |Lef|Dow|Rig| | |Psc|Slk|Pau| |Tsk|End| |
- * |-----------------------------------------------------------|
- * | |Del| |Web|Mut|VoU|VoD| |PgU|PgD|Del| |
- * |-----------------------------------------------------------|
- * | | | | FnS | | | | |
- * `-----------------------------------------------------------'
- * Fn: to Fn overlay
- * FnL: to Layout selector overaly
- * FnQ: toggle Esc overlay
- * FnS: toggle Arrow overlay
- */
- KEYMAP_ANSI(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,FN2, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, FN4, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN3, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
- TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS),
- /* 7: Layout selector
- * ,-----------------------------------------------------------.
- * | Lq| Lc| Ld| Lw| | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | |Lq |Lw | | | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | |Ld | | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | |Lc | | | | | | | | |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- * Lq: set Qwerty layout
- * Lc: set Colemak layout
- * Ld: set Dvorak layout
- * Lw: set Workman layout
- */
- KEYMAP_ANSI(
- FN5, FN6, FN7, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,FN5, FN8, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,FN6, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
-};
-const uint16_t PROGMEM fn_actions[] = {
- /* Poker Layout */
- [0] = ACTION_LAYER_MOMENTARY(6), // to Fn overlay
- [1] = ACTION_LAYER_TOGGLE(4), // toggle arrow overlay
- [2] = ACTION_LAYER_TOGGLE(5), // toggle Esc overlay
- [3] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // Task(RControl,RShift+Esc)
- [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
- [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
- [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
- [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
- [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
-};
diff --git a/keyboard/gh60/keymaps/poker_bit.c b/keyboard/gh60/keymaps/poker_bit.c
deleted file mode 100644
index b8870fdd81..0000000000
--- a/keyboard/gh60/keymaps/poker_bit.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "keymap_common.h"
-
-// Poker fix with toggle and bit operation
-// Fn + Esc = `
-// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 4: Poker Default + Fn'd */
- [4] = KEYMAP_ANSI(
- TRNS,F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- CAPS,FN2, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN4, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
- TRNS,TRNS,TRNS, FN1, TRNS,TRNS,TRNS,TRNS),
- /* 5: Poker with Arrow */
- KEYMAP_ANSI(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, PGUP, \
- TRNS,TRNS,TRNS, TRNS, FN3, HOME,PGDN,END),
- /* 6: Poker with Esc */
- KEYMAP_ANSI(
- ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
- /* 7: Poker with Arrow + Fn'd */
- KEYMAP_ANSI(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
- TRNS,TRNS,TRNS, TRNS, TRNS,LEFT,DOWN,RGHT),
-};
-const uint16_t PROGMEM fn_actions[] = {
- /* Poker Layout */
- [0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH), // Poker Fn(with fix for Esc)
- [1] = ACTION_LAYER_TOGGLE(5), // Poker Arrow toggle
- [2] = ACTION_LAYER_TOGGLE(6), // Poker Esc toggle
- [3] = ACTION_LAYER_BIT_XOR(1, 0b1101, ON_BOTH), // Poker Fn(with fix for Arrow)
- [4] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN3 Task(RControl,RShift+Esc)
-};
diff --git a/keyboard/gh60/keymaps/poker_set.c b/keyboard/gh60/keymaps/poker_set.c
deleted file mode 100644
index aaa31fc571..0000000000
--- a/keyboard/gh60/keymaps/poker_set.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "keymap_common.h"
-
-// Poker fix with set(state transition)
-// Fn + Esc = `
-// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- KEYMAP_ANSI(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, SPC, FN0, RGUI,APP, RCTL),
- /* 1: Poker with Arrow */
- KEYMAP_ANSI(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
- TRNS,TRNS,TRNS, TRNS, FN1, LEFT,DOWN,RGHT),
- /* 2: Poker with Esc */
- KEYMAP_ANSI(
- ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, FN2, TRNS,TRNS,TRNS),
- /* 3: Poker with Arrow and Esc */
- KEYMAP_ANSI(
- ESC, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, UP, \
- TRNS,TRNS,TRNS, TRNS, FN3, LEFT,DOWN,RGHT),
- /* 4: Poker Fn'd */
- KEYMAP_ANSI(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,FN6, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
- TRNS,TRNS,TRNS, FN5, FN4, TRNS,TRNS,TRNS),
- /* 5: Poker Fn'd arrow */
- KEYMAP_ANSI(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,FN7, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, PGUP, \
- TRNS,TRNS,TRNS, FN4, FN5, HOME,PGDN,END),
- /* 6: Poker Fn'd Esc */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,FN4, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, TRNS, \
- TRNS,TRNS,TRNS, FN7, FN6, TRNS,TRNS,TRNS),
- /* 7: Poker Fn'd Arrow + Esc */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,FN5, UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,CALC,TRNS,HOME,INS, TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,FN8, END, TRNS, \
- TRNS,DEL, TRNS,WHOM,MUTE,VOLU,VOLD,TRNS,PGUP,PGDN,DEL, PGUP, \
- TRNS,TRNS,TRNS, FN6, FN7, HOME,PGDN,END),
-};
-
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- /* Poker Layout */
- [0] = ACTION_LAYER_SET(4, ON_PRESS), // FN0 move to Fn'd when press
- [1] = ACTION_LAYER_SET(5, ON_PRESS), // FN1 move to Fn'd arrow when press
- [2] = ACTION_LAYER_SET(6, ON_PRESS), // FN2 move to Fn'd Esc when press
- [3] = ACTION_LAYER_SET(7, ON_PRESS), // FN3 move to Fn'd arrow + Esc when press
-
- //[4] = ACTION_LAYER_CLEAR(ON_RELEASE), // FN4 clear overlay when release
- [4] = ACTION_LAYER_SET(0, ON_RELEASE), // FN4 clear overlay when release
- [5] = ACTION_LAYER_SET(1, ON_RELEASE), // FN5 move to arrow when release
- [6] = ACTION_LAYER_SET(2, ON_RELEASE), // FN6 move to Esc when release
- [7] = ACTION_LAYER_SET(3, ON_RELEASE), // FN7 move to arrow + Esc when release
-
- [8] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN8 Task(RControl,RShift+Esc)
-};
diff --git a/keyboard/gh60/keymaps/spacefn.c b/keyboard/gh60/keymaps/spacefn.c
deleted file mode 100644
index 8077dcee7b..0000000000
--- a/keyboard/gh60/keymaps/spacefn.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "keymap_common.h"
-
-/*
- * SpaceFN
- * http://geekhack.org/index.php?topic=51069.0
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap 0: Default Layer
- * ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |-----------------------------------------------------------|
- * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |App |Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ANSI(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, \
- LCTL,LGUI,LALT, FN0, RALT,RGUI,APP, RCTL),
-
- /* Overlay 1: SpaceFN
- * ,-----------------------------------------------------------.
- * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * | | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- * |-----------------------------------------------------------|
- * | | | | | | |PgU|Lef|Dow|Rig| | | |
- * |-----------------------------------------------------------|
- * | | | | | |Spc|PgD|` |~ | | | |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- KEYMAP_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, \
- TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,TRNS, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
-};
-
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
diff --git a/keyboard/gh60/led.c b/keyboard/gh60/led.c
deleted file mode 100644
index 50659d7247..0000000000
--- a/keyboard/gh60/led.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <avr/io.h>
-#include "stdint.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- // output low
- DDRB |= (1<<2);
- PORTB &= ~(1<<2);
- } else {
- // Hi-Z
- DDRB &= ~(1<<2);
- PORTB &= ~(1<<2);
- }
-} \ No newline at end of file
diff --git a/keyboard/gh60/matrix.c b/keyboard/gh60/matrix.c
deleted file mode 100644
index 53a0b731bc..0000000000
--- a/keyboard/gh60/matrix.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-static uint8_t debouncing = DEBOUNCE;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- // initialize row and col
- unselect_rows();
- init_cols();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-}
-
-uint8_t matrix_scan(void)
-{
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- select_row(i);
- _delay_us(30); // without this wait read unstable value.
- matrix_row_t cols = read_cols();
- if (matrix_debouncing[i] != cols) {
- matrix_debouncing[i] = cols;
- if (debouncing) {
- debug("bounce!: "); debug_hex(debouncing); debug("\n");
- }
- debouncing = DEBOUNCE;
- }
- unselect_rows();
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-/* Column pin configuration
- * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- * pin: F0 F1 E6 C7 C6 B6 D4 B1 B0 B5 B4 D7 D6 B3 (Rev.A)
- * pin: B7 (Rev.B)
- */
-static void init_cols(void)
-{
- // Input with pull-up(DDR:0, PORT:1)
- DDRF &= ~(1<<0 | 1<<1);
- PORTF |= (1<<0 | 1<<1);
- DDRE &= ~(1<<6);
- PORTE |= (1<<6);
- DDRD &= ~(1<<7 | 1<<6 | 1<<4);
- PORTD |= (1<<7 | 1<<6 | 1<<4);
- DDRC &= ~(1<<7 | 1<<6);
- PORTC |= (1<<7 | 1<<6);
- DDRB &= ~(1<<7 | 1<<6 | 1<< 5 | 1<<4 | 1<<3 | 1<<1 | 1<<0);
- PORTB |= (1<<7 | 1<<6 | 1<< 5 | 1<<4 | 1<<3 | 1<<1 | 1<<0);
-}
-
-static matrix_row_t read_cols(void)
-{
- return (PINF&(1<<0) ? 0 : (1<<0)) |
- (PINF&(1<<1) ? 0 : (1<<1)) |
- (PINE&(1<<6) ? 0 : (1<<2)) |
- (PINC&(1<<7) ? 0 : (1<<3)) |
- (PINC&(1<<6) ? 0 : (1<<4)) |
- (PINB&(1<<6) ? 0 : (1<<5)) |
- (PIND&(1<<4) ? 0 : (1<<6)) |
- (PINB&(1<<1) ? 0 : (1<<7)) |
- ((PINB&(1<<0) && PINB&(1<<7)) ? 0 : (1<<8)) | // Rev.A and B
- (PINB&(1<<5) ? 0 : (1<<9)) |
- (PINB&(1<<4) ? 0 : (1<<10)) |
- (PIND&(1<<7) ? 0 : (1<<11)) |
- (PIND&(1<<6) ? 0 : (1<<12)) |
- (PINB&(1<<3) ? 0 : (1<<13));
-}
-
-/* Row pin configuration
- * row: 0 1 2 3 4
- * pin: D0 D1 D2 D3 D5
- */
-static void unselect_rows(void)
-{
- // Hi-Z(DDR:0, PORT:0) to unselect
- DDRD &= ~0b00101111;
- PORTD &= ~0b00101111;
-}
-
-static void select_row(uint8_t row)
-{
- // Output low(DDR:1, PORT:0) to select
- switch (row) {
- case 0:
- DDRD |= (1<<0);
- PORTD &= ~(1<<0);
- break;
- case 1:
- DDRD |= (1<<1);
- PORTD &= ~(1<<1);
- break;
- case 2:
- DDRD |= (1<<2);
- PORTD &= ~(1<<2);
- break;
- case 3:
- DDRD |= (1<<3);
- PORTD &= ~(1<<3);
- break;
- case 4:
- DDRD |= (1<<5);
- PORTD &= ~(1<<5);
- break;
- }
-}
diff --git a/keyboard/gh60/pinout.txt b/keyboard/gh60/pinout.txt
new file mode 100644
index 0000000000..3787f938e7
--- /dev/null
+++ b/keyboard/gh60/pinout.txt
@@ -0,0 +1,18 @@
+ /* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
+ * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
+ */
+
+ /* Row pin configuration
+ * row: 0 1 2 3 4
+ * pin: D0 D1 D2 D3 D5
+ */
+
+ GPIO pads
+ 0 F7 WASD LEDs
+ 1 F6 ESC LED
+ 2 F5 FN LED
+ 3 F4 POKER Arrow LEDs
+
+ B2 Capslock LED
+ B0 not connected \ No newline at end of file