summaryrefslogtreecommitdiff
path: root/keyboards/hhkb
diff options
context:
space:
mode:
authorJack Humbert2016-06-21 22:39:54 -0400
committerGitHub2016-06-21 22:39:54 -0400
commit649b33d7783cf3021928534b7ae127e0a89e8807 (patch)
treec2b5e0cf8ff4aa2918e3b88ab75dbdb071cc0a1d /keyboards/hhkb
parent464c8e274f993d3571fe5ea5e836fe55a3912ffe (diff)
Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432)
* fixes from tmk's repo * rename keyboard to keyboards
Diffstat (limited to 'keyboards/hhkb')
-rw-r--r--keyboards/hhkb/Makefile86
-rw-r--r--keyboards/hhkb/README.md180
-rw-r--r--keyboards/hhkb/config.h71
-rw-r--r--keyboards/hhkb/hhkb.c29
-rw-r--r--keyboards/hhkb/hhkb.h30
-rw-r--r--keyboards/hhkb/hhkb_avr.h167
-rw-r--r--keyboards/hhkb/keymaps/default/compiled.hex1381
-rw-r--r--keyboards/hhkb/keymaps/default/keymap.c78
-rw-r--r--keyboards/hhkb/keymaps/lxol/compiled.hex1421
-rw-r--r--keyboards/hhkb/keymaps/lxol/keymap.c208
-rw-r--r--keyboards/hhkb/matrix.c204
11 files changed, 3855 insertions, 0 deletions
diff --git a/keyboards/hhkb/Makefile b/keyboards/hhkb/Makefile
new file mode 100644
index 000000000..53eece396
--- /dev/null
+++ b/keyboards/hhkb/Makefile
@@ -0,0 +1,86 @@
+
+
+# project specific files
+SRC = matrix.c
+
+# 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
+
+# as per original hasu settings
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+# 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 # Custom matrix file for the HHKB
+# 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
+
+debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
+debug-on: all
+
+debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
+debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
+debug-off: all
diff --git a/keyboards/hhkb/README.md b/keyboards/hhkb/README.md
new file mode 100644
index 000000000..2bfec7aa5
--- /dev/null
+++ b/keyboards/hhkb/README.md
@@ -0,0 +1,180 @@
+hhkb_qmk keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
+
+ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+ MIDI_ENABLE = yes # MIDI controls
+ # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
+ BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+## Quick aliases to common actions
+
+Your keymap can include shortcuts to common operations (called "function actions" in tmk).
+
+### Switching and toggling layers
+
+`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
+
+`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
+
+`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
+
+### Fun with modifier keys
+
+* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
+* `RSFT(kc)` - applies right Shift to *kc*
+* `LCTL(kc)` - applies left Control to *kc*
+* `RCTL(kc)` - applies right Control to *kc*
+* `LALT(kc)` - applies left Alt to *kc*
+* `RALT(kc)` - applies right Alt to *kc*
+* `LGUI(kc)` - applies left GUI (command/win) to *kc*
+* `RGUI(kc)` - applies right GUI (command/win) to *kc*
+
+You can also chain these, like this:
+
+ LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
+
+The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
+
+ KC_TILD ~
+ KC_EXLM !
+ KC_AT @
+ KC_HASH #
+ KC_DLR $
+ KC_PERC %
+ KC_CIRC ^
+ KC_AMPR &
+ KC_ASTR *
+ KC_LPRN (
+ KC_RPRN )
+ KC_UNDS _
+ KC_PLUS +
+ KC_LCBR {
+ KC_RCBR }
+ KC_PIPE |
+ KC_COLN :
+
+`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
+
+These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
+
+ * MOD_LCTL
+ * MOD_LSFT
+ * MOD_LALT
+ * MOD_LGUI
+
+These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
+
+We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
+
+ * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
+ * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
+ * `ALT_T(kc)` - is LALT when held and *kc* when tapped
+ * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
+ * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
+
+### Temporarily setting the default layer
+
+`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
+
+### Remember: These are just aliases
+
+These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
+
+Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
+
+## Macro shortcuts: Send a whole string when pressing just one key
+
+Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
+{
+ switch(id) {
+ case 0: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+```
+A macro can include the following commands:
+
+* I() change interval of stroke in milliseconds.
+* D() press key.
+* U() release key.
+* T() type key(press and release).
+* W() wait (milliseconds).
+* END end mark.
+
+So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
+
+Note: Using macros to have your keyboard send passwords for you is a bad idea.
+
+### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
+
+Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
+
+ #include "keymap_<layout>.h"
+
+Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
+
+ * `CM_*` for all of the Colemak-equivalent characters
+ * `DV_*` for all of the Dvorak-equivalent characters
+
+These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
+
+To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
+
+## Additional language support
+
+In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
+
+## Unicode support
+
+You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
+
+## Other firmware shortcut keycodes
+
+* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
+* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
+* `BL_ON` - turns the backlight on
+* `BL_OFF` - turns the backlight off
+* `BL_<n>` - sets the backlight to level *n*
+* `BL_INC` - increments the backlight level by one
+* `BL_DEC` - decrements the backlight level by one
+* `BL_TOGG` - toggles the backlight
+* `BL_STEP` - steps through the backlight levels
+
+Enable the backlight from the Makefile.
+
+## MIDI functionalty
+
+This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
+
+## Bluetooth functionality
+
+This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
+
+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 a file in the keymaps folder named `<name>.c` 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/keyboards/hhkb/config.h b/keyboards/hhkb/config.h
new file mode 100644
index 000000000..ee66e4457
--- /dev/null
+++ b/keyboards/hhkb/config.h
@@ -0,0 +1,71 @@
+/*
+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 0xCAFE
+#define DEVICE_VER 0x0104
+#define MANUFACTURER q.m.k
+#define PRODUCT HHKB mod
+#define DESCRIPTION q.m.k keyboard firmware for HHKB
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+#define TAPPING_TERM 200
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* 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
diff --git a/keyboards/hhkb/hhkb.c b/keyboards/hhkb/hhkb.c
new file mode 100644
index 000000000..6897026c6
--- /dev/null
+++ b/keyboards/hhkb/hhkb.c
@@ -0,0 +1,29 @@
+#include "hhkb.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave these blank
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave these blank
+};
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ if (matrix_init_user) {
+ (*matrix_init_user)();
+ }
+};
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ if (matrix_scan_user) {
+ (*matrix_scan_user)();
+ }
+};
diff --git a/keyboards/hhkb/hhkb.h b/keyboards/hhkb/hhkb.h
new file mode 100644
index 000000000..093d7aeab
--- /dev/null
+++ b/keyboards/hhkb/hhkb.h
@@ -0,0 +1,30 @@
+#ifndef HHKB_H
+#define HHKB_H
+
+#include "matrix.h"
+#include "keymap.h"
+//#include "backlight.h"
+#include <stddef.h>
+
+#define KEYMAP( \
+ K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \
+ K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \
+ K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \
+ K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \
+ K35, K36, K37, K57, K56) \
+ \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, KC_NO }, \
+ { K70, K71, K72, K73, K74, K75, K76, KC_NO } \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/hhkb/hhkb_avr.h b/keyboards/hhkb/hhkb_avr.h
new file mode 100644
index 000000000..7ea6322c7
--- /dev/null
+++ b/keyboards/hhkb/hhkb_avr.h
@@ -0,0 +1,167 @@
+#ifndef HHKB_AVR_H
+#define HHKB_AVR_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+
+
+// Timer resolution check
+#if (1000000/TIMER_RAW_FREQ > 20)
+# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
+#endif
+
+
+/*
+ * HHKB Matrix I/O
+ *
+ * row: HC4051[A,B,C] selects scan row0-7
+ * row-ext: [En0,En1] row extention for JP
+ * col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
+ * key: on: 0/off: 1
+ * prev: hysteresis control: assert(1) when previous key state is on
+ */
+
+
+#if defined(__AVR_ATmega32U4__)
+/*
+ * For TMK HHKB alt controller(ATMega32U4)
+ *
+ * row: PB0-2
+ * col: PB3-5,6
+ * key: PD7(pull-uped)
+ * prev: PB7
+ * power: PD4(L:off/H:on)
+ * row-ext: PC6,7 for HHKB JP(active low)
+ */
+static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
+static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
+static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
+static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
+static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
+#ifdef HHKB_POWER_SAVING
+static inline void KEY_POWER_ON(void) {
+ DDRB = 0xFF; PORTB = 0x40; // change pins output
+ DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
+ /* Without this wait you will miss or get false key events. */
+ _delay_ms(5); // wait for powering up
+}
+static inline void KEY_POWER_OFF(void) {
+ /* input with pull-up consumes less than without it when pin is open. */
+ DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
+ DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
+}
+static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
+#else
+static inline void KEY_POWER_ON(void) {}
+static inline void KEY_POWER_OFF(void) {}
+static inline bool KEY_POWER_STATE(void) { return true; }
+#endif
+static inline void KEY_INIT(void)
+{
+ /* row,col,prev: output */
+ DDRB = 0xFF;
+ PORTB = 0x40; // unable
+ /* key: input with pull-up */
+ DDRD &= ~0x80;
+ PORTD |= 0x80;
+#ifdef HHKB_JP
+ /* row extention for HHKB JP */
+ DDRC |= (1<<6|1<<7);
+ PORTC |= (1<<6|1<<7);
+#endif
+ KEY_UNABLE();
+ KEY_PREV_OFF();
+
+ KEY_POWER_OFF();
+}
+static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
+{
+ PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
+#ifdef HHKB_JP
+ if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
+ else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
+#endif
+}
+
+
+#elif defined(__AVR_AT90USB1286__)
+/*
+ * For Teensy++(AT90USB1286)
+ *
+ * HHKB pro HHKB pro2
+ * row: PB0-2 (6-8) (5-7)
+ * col: PB3-5,6 (9-12) (8-11)
+ * key: PE6(pull-uped) (4) (3)
+ * prev: PE7 (5) (4)
+ *
+ * TODO: convert into 'staitc inline' function
+ */
+#define KEY_INIT() do { \
+ DDRB |= 0x7F; \
+ DDRE |= (1<<7); \
+ DDRE &= ~(1<<6); \
+ PORTE |= (1<<6); \
+} while (0)
+#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
+ (((COL) & 0x07)<<3) | \
+ ((ROW) & 0x07))
+#define KEY_ENABLE() (PORTB &= ~(1<<6))
+#define KEY_UNABLE() (PORTB |= (1<<6))
+#define KEY_STATE() (PINE & (1<<6))
+#define KEY_PREV_ON() (PORTE |= (1<<7))
+#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
+#define KEY_POWER_ON()
+#define KEY_POWER_OFF()
+#define KEY_POWER_STATE() true
+
+
+#else
+# error "define code for matrix scan"
+#endif
+
+
+#if 0
+// For ATMega328P with V-USB
+//
+// #elif defined(__AVR_ATmega328P__)
+// Ports for V-USB
+// key: PB0(pull-uped)
+// prev: PB1
+// row: PB2-4
+// col: PC0-2,3
+// power: PB5(Low:on/Hi-z:off)
+#define KEY_INIT() do { \
+ DDRB |= 0x3E; \
+ DDRB &= ~(1<<0); \
+ PORTB |= 1<<0; \
+ DDRC |= 0x0F; \
+ KEY_UNABLE(); \
+ KEY_PREV_OFF(); \
+} while (0)
+#define KEY_SELECT(ROW, COL) do { \
+ PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
+ PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
+} while (0)
+#define KEY_ENABLE() (PORTC &= ~(1<<3))
+#define KEY_UNABLE() (PORTC |= (1<<3))
+#define KEY_STATE() (PINB & (1<<0))
+#define KEY_PREV_ON() (PORTB |= (1<<1))
+#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
+// Power supply switching
+#define KEY_POWER_ON() do { \
+ KEY_INIT(); \
+ PORTB &= ~(1<<5); \
+ _delay_ms(1); \
+} while (0)
+#define KEY_POWER_OFF() do { \
+ DDRB &= ~0x3F; \
+ PORTB &= ~0x3F; \
+ DDRC &= ~0x0F; \
+ PORTC &= ~0x0F; \
+} while (0)
+#endif
+
+#endif
diff --git a/keyboards/hhkb/keymaps/default/compiled.hex b/keyboards/hhkb/keymaps/default/compiled.hex
new file mode 100644
index 000000000..b3af69527
--- /dev/null
+++ b/keyboards/hhkb/keymaps/default/compiled.hex
@@ -0,0 +1,1381 @@
+:100000000C9452060C9496060C9496060C94960644
+:100010000C9496060C9496060C9496060C949606F0
+:100020000C9496060C9496060C945A110C942C126F
+:100030000C941C1F0C9496060C9496060C94960631
+:100040000C9496060C9496060C9496060C949606C0
+:100050000C9496060C94BC1F0C9496060C94960671
+:100060000C9496060C9496060C9496060C949606A0
+:100070000C9496060C9496060C9496060C94960690
+:100080000C9496060C9496060C9496060C94960680
+:100090000C9496060C9496060C9496060C94960670
+:1000A0000C9496060C9496060C9496069912BB1224
+:1000B000A913BB12A91300132313A91378138B13CD
+:1000C0006516651694169416D316F316231823187E
+:1000D000FE162318AE17AE171418231823181D1870
+:1000E000BB17BB17BB17BB17BB17BB17BB17BB1780
+:1000F000BB17BB17BB17BB17BB17BB17BB17BB1770
+:10010000CB17D917E017E717F117253032583A20E7
+:10011000253038620A000A722F63203031323334BE
+:100120003536370A001F0014001A00160004001D9F
+:10013000001B000600200021001500080007000930
+:100140000019000500220023001C0017000A000B04
+:1001500000110000001E0029002B00E000E100E279
+:1001600000E3002C002400250018000C000E000DF8
+:100170000010000000310035002A0028000152E57F
+:1001800000E600E700260027001200130033000FEE
+:1001900000360000002D002E0030002F0034003803
+:1001A00000370000003B0001000100A900AA000187
+:1001B00000010001003C003D0001000100A8000119
+:1001C00000010001003E003F000100010001005558
+:1001D00000570000003A00A50039000100010001AD
+:1001E000000100010040004100010046004A0054A7
+:1001F000005600000049004C002A00580001000190
+:100200000001000100420043004700480050004B3D
+:10021000004D00000044004500010052004F005115
+:10022000004E0000000A44454255473A20656E6181
+:10023000626C65642E0A005B735D004B6579626FCA
+:100240006172642073746172742E0A005B575D00E2
+:100250005B535D005B525D005B445D005B435D0092
+:100260001203480048004B00420020006D006F0060
+:10027000640000000C0371002E006D002E006B0066
+:1002800000000403090409027400040100A0FA0933
+:100290000400000103010100092111010001223FB6
+:1002A000000705810308000A090401000103010297
+:1002B00000092111010001224D00070582030800F9
+:1002C0000A090402000103000000092111010001D4
+:1002D0002236000705830308000A0904030002030D
+:1002E00000000009211101000122200007058403FC
+:1002F0002000010705040320000112011001000085
+:100300000008EDFEFECA0401010200010631FF09EA
+:1003100074A1010975150025FF9520750881020952
+:1003200076150025FF952075089102C0050109800A
+:10033000A101850216010026B7001A01002AB700A4
+:10034000751095018100C0050C0901A101850316F6
+:100350000100269C021A01002A9C02751095018159
+:1003600000C005010902A1010901A1000509190147
+:100370002905150025019505750181029501750373
+:1003800081010501093009311581257F9502750824
+:10039000810609381581257F950175088106050CB0
+:1003A0000A38021581257F950175088106C0C005B0
+:1003B000010906A101050719E029E71500250195A6
+:1003C0000875018102950175088101050819012947
+:1003D00005950575019102950175039101050719B0
+:1003E0000029FF150025FF950675088100C00A0049
+:1003F0002530325820006B6579626F6172645F72DC
+:1004000065706F72743A20004B6579626F61726437
+:10041000204C4544732073746174653A2025780A32
+:1004200000646F6E652E0A00626F6F676D616769A9
+:1004300063207363616E3A202E2E2E2000290A005D
+:100440002575002F002575005D280025640020001B
+:10045000256400200025640020002564007C002520
+:10046000303258006D6F7573656B6579205B62740F
+:100470006E7C782079207620685D287265702F6107
+:10048000636C293A205B006D6B5F776865656C5F14
+:1004900074696D655F746F5F6D6178203D202564C0
+:1004A0000A006D6B5F776865656C5F6D61785F737F
+:1004B00070656564203D2025640A006D6B5F74697A
+:1004C0006D655F746F5F6D6178203D2025640A0063
+:1004D0006D6B5F6D61785F7370656564203D20258D
+:1004E000640A006D6B5F696E74657276616C203DA5
+:1004F0002025640A006D6B5F64656C6179203D2086
+:1005000025640A006D6B5F776865656C5F74696D63
+:10051000655F746F5F6D6178203D2025640A006D12
+:100520006B5F776865656C5F6D61785F737065653B
+:1005300064203D2025640A006D6B5F74696D655F02
+:10054000746F5F6D6178203D2025640A006D6B5FDC
+:100550006D61785F7370656564203D2025640A00D5
+:100560006D6B5F696E74657276616C203D202564E9
+:100570000A006D6B5F64656C6179203D2025640A1B
+:10058000000A00257500363A20776865656C5F744F
+:10059000696D655F746F5F6D61783A20000A0025B0
+:1005A0007500353A20776865656C5F6D61785F73BB
+:1005B000706565643A20000A00257500343A20749D
+:1005C000696D655F746F5F6D61783A20000A002580
+:1005D0007500333A206D61785F73706565643A2009
+:1005E000000A00257500323A20696E7465727661E2
+:1005F0006C286D73293A20000A00257500313A20D5
+:1006000064656C6179282A31306D73293A20000ABB
+:10061000092D2056616C756573202D0A004D3E0032
+:100620004D25643E20003F0073657420646566615B
+:10063000756C740A00433E2000776865726520641B
+:10064000656C74613A20637572736F723D25642C1A
+:1006500020776865656C3D25640A5365652068747C
+:1006600074703A2F2F656E2E77696B6970656469B7
+:10067000612E6F72672F77696B692F4D6F75736588
+:100680005F6B6579730A000A092D204D6F757365DC
+:100690006B6579202D0A4553432F713A09717569AD
+:1006A000740A313A0964656C6179282A31306D73B6
+:1006B000290A323A09696E74657276616C286D7325
+:1006C000290A333A096D61785F73706565640A348D
+:1006D0003A0974696D655F746F5F6D61780A353AC8
+:1006E00009776865656C5F6D61785F7370656564D7
+:1006F0000A363A09776865656C5F74696D655F7481
+:100700006F5F6D61780A0A703A097072696E7420C1
+:1007100076616C7565730A643A0973657420646563
+:100720006661756C74730A75703A092B310A646FCF
+:10073000776E3A092D310A706775703A092B31309E
+:100740000A7067646F776E3A092D31300A0A737048
+:10075000656564203D2064656C7461202A206D61AC
+:10076000785F7370656564202A2028726570656102
+:1007700074202F2074696D655F746F5F6D617829D7
+:100780000A003F004D3E2000433E20004C25640AF5
+:100790000074696D65725F636F756E743A20253001
+:1007A000346C580A006B6579626F6172645F6964CA
+:1007B0006C653A2025580A006B6579626F61726436
+:1007C0005F70726F746F636F6C3A2025580A00680F
+:1007D0006F73745F6B6579626F6172645F6C65647F
+:1007E0007328293A2025580A000A092D20537461DC
+:1007F000747573202D0A004743433A20342E392E56
+:1008000032204156522D4C4942433A20312E382E47
+:1008100031204156525F415243483A206176723549
+:100820000A004F5054494F4E533A204C55464120F0
+:10083000424F4F544D41474943204D4F5553454B2F
+:1008400045592045585452414B455920434F4E532A
+:100850004F4C4520434F4D4D414E44203531320AD7
+:10086000004255494C443A20313637313865662DBF
+:100870006469727479202832333A33393A32382035
+:100880004A756E2020392032303136290A00564907
+:10089000443A2030784645454428712E6D2E6B2908
+:1008A000205049443A203078434146452848484B37
+:1008B00042206D6F6429205645523A2030783031FD
+:1008C00030340A00444553433A20712E6D2E6B207C
+:1008D0006B6579626F617264206669726D776172AF
+:1008E0006520666F722048484B420A000A092D2095
+:1008F00056657273696F6E202D0A000A092D204318
+:100900006F6E736F6C65202D0A4553432F713A0942
+:10091000717569740A6D3A096D6F7573656B6579E8
+:100920000A000A092D204D61676963202D0A443AA7
+:10093000094465627567204D65737361676520546E
+:100940006F67676C650A583A094D6174726978205F
+:100950004465627567204D6F646520546F67676CEE
+:1009600065202D2053686F77206B657970726573F1
+:1009700073657320696E206D617472697820677287
+:1009800069640A4B3A094B6579626F61726420446D
+:100990006562756720546F67676C65202D2053680A
+:1009A0006F77206B65797072657373207265706FF5
+:1009B00072740A4D3A094465627567204D6F75730C
+:1009C0006520546F67676C650A563A0956657273FD
+:1009D000696F6E0A533A095374617475730A433A26
+:1009E00009416374697661746520436F6E736F6C3F
+:1009F00065204D6F64650A46312D4631303A095302
+:100A0000776974636820746F204C61796572203057
+:100A10002D392028463130203D204C30290A302DF8
+:100A2000393A0953776974636820746F204C61798F
+:100A3000657220302D390A4553433A09537769745A
+:100A4000636820746F204C617965722030202861C2
+:100A50006C7465726E617465206B65792031290A4A
+:100A600047524156453A0953776974636820746F59
+:100A7000204C6179657220302028616C7465726E3B
+:100A8000617465206B65792032290A5041555345C0
+:100A90003A094A756D7020746F20426F6F746C6FE5
+:100AA0006164657220285265736574290A453A09A4
+:100AB0005072696E7420454550524F4D20536574F5
+:100AC00074696E67730A000A002575002E6E6B72DA
+:100AD0006F3A20000A002575002E737761705F62FF
+:100AE00061636B736C6173685F6261636B73706188
+:100AF00063653A20000A002575002E737761705FE8
+:100B000067726176655F6573633A20000A00257538
+:100B1000002E6E6F5F6775693A20000A0025750028
+:100B20002E737761705F72616C745F726775693A7A
+:100B300020000A002575002E737761705F6C616C70
+:100B4000745F6C6775693A20000A002575002E6392
+:100B50006170736C6F636B5F746F5F636F6E7472E1
+:100B60006F6C3A20000A002575002E737761705F64
+:100B7000636F6E74726F6C5F636170736C6F636BC5
+:100B80003A20000A0025303258006B65796D61709B
+:100B90005F636F6E6669672E7261773A20000A00A4
+:100BA0002575002E6D6F7573653A20000A00257556
+:100BB000002E6B6579626F6172643A20000A00252D
+:100BC00075002E6D61747269783A20000A002575EF
+:100BD000002E656E61626C653A20000A0025303295
+:100BE000580064656275675F636F6E6669672E7231
+:100BF00061773A20000A0025750064656661756CAE
+:100C0000745F6C617965723A20003F000A6D6F7500
+:100C100073653A206F66660A000A6D6F7573653AF0
+:100C2000206F6E0A000A6B6579626F6172643A2008
+:100C30006F66660A000A6B6579626F6172643A20BA
+:100C40006F6E0A000A6D61747269783A206F666689
+:100C50000A000A6D61747269783A206F6E0A000AA0
+:100C600064656275673A206F66660A000A646562A9
+:100C700075673A206F6E0A000A0A4A756D70696ED0
+:100C80006720746F20626F6F746C6F616465722E81
+:100C90002E2E2000433E20006565636F6E666967F7
+:100CA0003A0A000011241FBECFEFDAE0DEBFCDBF4D
+:100CB00004B603FE24C08091E0019091E101A0916F
+:100CC000E201B091E3018730904BA740B04BB9F4FB
+:100CD0001092E0011092E1011092E2011092E30102
+:100CE00014BE84B7877F84BF88E10FB6F8948093E1
+:100CF0006000109260000FBEE0E0FFE3099511E094
+:100D0000A0E0B1E0ECEFF5E502C005900D92A23352
+:100D1000B107D9F711E0A2E3B1E001C01D92A03EF6
+:100D2000B107E1F70E94940E0C94FC2A0C94000089
+:100D3000FF93EF93E0913201F0913301309709F086
+:100D40000995EF91FF910895FC018591803011F094
+:100D5000EFDFFBCF0895FF27E0E230E247FF0CC052
+:100D6000419597FF09C0EDE260957095809590954B
+:100D7000611D711D811D911D27FF02C0219530E36A
+:100D800050E2AA27660F771F881F991FAA1FA41772
+:100D900010F0A41B63955A95A9F7AA3008F0A95F33
+:100DA000A05DAF93F395611571058105910541F73C
+:100DB000ED3211F4EF93F395F21718F43F93F39596
+:100DC000FBCF8F91B5DFFA95E1F70895E991F9919D
+:100DD0008591803021F0853219F0AADFF9CF08958E
+:100DE00020E0E89455915532C1F3503311F46894E2
+:100DF00055915A3348F4505390F3220F022E220F8C
+:100E0000220F200D250FF4CF0EF421958991999191
+:100E1000533619F3533729F1533559F1BC0188275B
+:100E20009927E8945C3621F48991999168945591B9
+:100E3000543639F446EF7EF077FF0DC08FEF9FEF09
+:100E40000AC055374AE039F0583540E121F05236B2
+:100E500042E009F00895FF93EF937DDFEF91FF915A
+:100E6000B7CFFF93EF93FC0181918030B9F360DF3E
+:100E7000FBCFFF93EF9368DFF1CFDF93CF93CDB735
+:100E8000DEB72596A3DFCF91DF9108958FEF84B968
+:100E900080E485B957985F9A2E9A2F98ECE3F1E099
+:100EA00088E08E0F11928E13FDCFE4E3F1E088E02D
+:100EB0008E0F11928E13FDCF8CE391E0909347013A
+:100EC0008093460184E391E090934501809344012F
+:100ED0000895EF92FF920F931F93CF93DF9380912A
+:100EE0004401909145012091460130914701309392
+:100EF0004501209344019093470180934601C0E04F
+:100F0000D0E0EE24E394F12C0FEF10E020E030E08D
+:100F100085B1807C8C2BA90193E0440F551F9A95D5
+:100F2000E1F7842B85B98AE18A95F1F700C0E09159
+:100F30004401F0914501EC0FFD1F808190E0022EED
+:100F400002C0959587950A94E2F780FD2F9A95E364
+:100F50009A95F1F70000E6B52E988AE18A95F1F7A7
+:100F600000C04091460150914701DA01AC0FBD1F0E
+:100F70004F9B0AC0C701022E01C0880F0A94EAF7EE
+:100F800080959C91892308C06C91C701022E01C0F5
+:100F9000880F0A94EAF7862B8C9386B56E2F70E043
+:100FA0008E1728F086B590E0861B970B06C0E6B535
+:100FB000C801861B970B8E0F911D069758F0E09184
+:100FC0004401F0914501EC0FFD1F8081FA01EC0F07
+:100FD000FD1F80839AE19A95F1F700C02F982E9A11
+:100FE0008BE291E00197F1F700C000002F5F3F4FC7
+:100FF0002830310509F08CCFA0914601B09147010E
+:10100000AC0FBD1FE0914401F0914501EC0FFD1FB5
+:101010009C918081981751F00E945A1F609348015B
+:101020007093490180934A0190934B012196C830F7
+:10103000D10509F06BCF8091D601853021F08091E8
+:10104000D601811111C060914801709149018091D0
+:101050004A0190914B010E94901F613177428105B6
+:10106000910510F00E94DF1E81E0DF91CF911F916A
+:101070000F91FF90EF900895209146013091470124
+:10108000F901E80FF11D808108950F931F93CF930D
+:10109000DF9386E191E00E94A406C0E0D0E00AE080
+:1010A00011E0E0914601F0914701EC0FFD1F8081B6
+:1010B0000E94C91E1F928F93DF93CF931F930F93AC
+:1010C0000E943D0721960F900F900F900F900F9068
+:1010D0000F90C830D10529F7DF91CF911F910F9163
+:1010E00008951F93CF93DF93C7E0D0E010E0E09125
+:1010F0004601F0914701EC0FFD1F808190E00E94B6
+:10110000BD1E180F219798F7812FDF91CF911F9166
+:1011100008950895089561110BC0FC018281882310
+:1011200021F085EE0E94591503C085EE0E94F81546
+:1011300080E090E0089581E0089581E008950C94A6
+:101140009D0808950F931F93CF93DF938C01FC01AB
+:10115000C081D181CE010E94871DBE010E944B0932
+:10116000EC01B8010E949F08882309F48DC0F801A2
+:101170008281882309F44AC08091570181111FC0E0
+:10118000C431F0E5DF0709F051C00E94A10881E0F9
+:10119000809357010E944E1F9093560180935501F2
+:1011A00010924E011092500110924F011092520174
+:1011B00010925101109254011092530165C0809118
+:1011C0005501909156010E94661F883C910570F46C
+:1011D00080914E01E82FF0E0EE0FFF1FE15BFE4F24
+:1011E000D183C0838F5F80934E014EC0C43880E5A9
+:1011F000D80721F0C538D04501F13AC0F801828105
+:10120000882341F010924C0182E01EC0C438E0E512
+:10121000DE0759F580914C01811106C086E20E94DB
+:10122000591586E20E94F81582E01CC0C438F0E52A
+:10123000DF0741F3C538D045D9F4F801828188230E
+:1012400031F010924D0180E20E9420161DC0809165
+:101250004D01811106C087E20E94591587E20E9464
+:10126000F81580E20E9427160FC0C538D04529F333
+:1012700081E080934C0180934D01C801DF91CF91B3
+:101280001F910F910C949B0880E0DF91CF911F91EB
+:101290000F9108950895E72FF0E098E0899FE00D01
+:1012A000F11D112483E0EE0FFF1F8A95E1F7E60F91
+:1012B000F11DEE0FFF1FEB5DFE4F85919491089598
+:1012C000880F991FFC01EB55F0408591949108958A
+:1012D000880F991FFC01EB5DFE4F85919491089555
+:1012E0000F931F93CF93DF93EC01811520E39207B7
+:1012F00050F5C11580E2D80708F0C3C0CB3BD1053B
+:1013000090F4C83AD10508F06AC0C53AD10508F092
+:101310005BC0C430D10508F0D4C1219709F0CEC11B
+:1013200001E010E00EC2CF3FD10511F008F0C9C1B5
+:10133000C03FD10508F0A2C0CE01805E9109089798
+:1013400008F4BFC1BBC1C13090E5D90709F4A2C000
+:1013500020F5C0318FE4D80770F4C11590E4D907A7
+:1013600008F094C0C11521E3D20708F0A7C1DD271A
+:101370008E01106CE6C1C115D04509F09FC10E94D5
+:101380008E188FEF94E32CE0815090402040E1F7DD
+:1013900000C000000E94E11FD4C1C11597E5D90724
+:1013A00058F4C03121E5D20708F020C1C43180E5EE
+:1013B000D80708F479C082C1CE01905781159041B9
+:1013C00008F07CC1DF7077C1C53AD10509F47BC153
+:1013D000C63AD10509F07AC102E810E4B2C1C83AB0
+:1013E000D10509F476C1C93AD10509F475C1CA3AE3
+:1013F000D10509F474C1CB3AD10509F473C1CC3AD3
+:10140000D10509F472C1CD3AD10509F471C1C03BCF
+:10141000D10509F470C1CE3AD10509F46FC1CF3AB4
+:10142000D10509F46EC1C13BD10509F46DC1C23BC0
+:10143000D10509F46CC1C33BD10509F46BC1C43BB0
+:10144000D10509F46AC1C53BD10509F469C1C63BA0
+:10145000D10509F468C1C73BD10509F467C1C83B90
+:10146000D10509F466C1C93BD10509F465C1CA3B80
+:10147000D10509F464C100E014E463C18E01106574
+:1014800060C1CE019F700E9468095CC1DF708E014F
+:10149000106A57C185E292E00E94A4068091C101C2
+:1014A00081608093C1014DC10E948721811102C0DA
+:1014B0000E946D210E94A42190E09093E00180930E
+:1014C000DF01C23080E5D80721F48091DF0181601F
+:1014D00086C0C43090E5D90721F48091DF01826095
+:1014E0007EC0C63020E5D20721F48091DF01846000
+:1014F00076C0C83080E5D80719F48091DF0127C095
+:10150000CA3090E5D90721F48091DF01806167C07E
+:10151000CC3020E5D20721F48091DF0180625FC0EA
+:10152000CE3080E5D80721F48091DF01806457C078
+:10153000C03190E5D90721F48091DF0180684FC068
+:10154000C23120E5D20729F48091DF0184608860F0
+:1015500046C0C33080E5D80721F48091DF018E7F3B
+:101560003EC0C53090E5D90721F48091DF018D7F21
+:1015700036C0C73020E5D20721F48091DF018B7F90
+:101580002EC0C93080E5D80719F48091DF0126C04C
+:10159000CB3090E5D90721F48091DF018F7E1FC009
+:1015A000CD3020E5D20721F48091DF018F7D17C077
+:1015B000CF3080E5D80721F48091DF018F7B0FC009
+:1015C000C13190E5D90721F48091DF018F7707C001
+:1015D000C331D04531F48091DF018B7F877F8093C9
+:1015E000DF018091DF010E94A821ABC08D2F9927D8
+:1015F0008F70992781309105D9F49E01237033278C
+:1016000002C0880F991F2A95E2F79C688E0144E07A
+:10161000000F111F4A95E1F700271370802B912BC3
+:1016200053E0CC0FDD1F5A95E1F7C076DD272FC0C0
+:101630008230910531F4DC2FCC278E01016F106AC6
+:1016400080C08330910569F4CE018370992701E051
+:1016500010E002C0000F111F8A95E2F7C8019C68D4
+:101660000FC084309105B9F4CE018370992701E051
+:1016700010E002C0000F111F8A95E2F7C8019A68B6
+:1016800023E0CC0FDD1F2A95E1F7C07ED7708C01D7
+:101690000C2B1D2B56C08530910531F4DC2FCC2747
+:1016A0008E01046F106A4DC0069709F04AC0CF71D1
+:1016B000DD27DC2FCC278E01106243C000E010E054
+:1016C00040C08E013EC001E810E43BC003E810E4D6
+:1016D00038C002EE14E435C009EE14E432C00AEE5C
+:1016E00014E42FC005EB14E42CC006EB14E429C06D
+:1016F00007EB14E426C00CEC14E423C00DEC14E456
+:1017000020C003E815E41DC00AE815E41AC002E988
+:1017100015E417C004E915E414C001E216E411C091
+:1017200003E216E40EC004E216E40BC005E216E480
+:1017300008C006E216E405C007E216E402C00AE2A9
+:1017400016E4C801DF91CF911F910F910895E72F03
+:10175000F0E098E0899FE00DF11D112483E0EE0F89
+:10176000FF1F8A95E1F7E60FF11DEE0FFF1FEB5DFE
+:10177000FE4F85919491803E9105E0F4803C910567
+:1017800058F58133910509F46FC048F48932910509
+:1017900009F463C08A32910509F46DC072C08933BF
+:1017A0009105E9F082389105D1F08533910509F46E
+:1017B0004DC067C0833E910581F138F4803E9105AC
+:1017C000B9F0823E9105D9F05CC0863E910561F189
+:1017D000873E9105A1F155C00E94600908952091AE
+:1017E000DF0120FD02C021FF4CC080EE90E049C027
+:1017F0008091DF0180FFF9CF89E390E042C08091C2
+:10180000DF0182FF0EC08091DF0184FF03C080E012
+:1018100090E037C083EE90E034C08091DF0182FF1A
+:10182000F2CF82EE90E02DC08091DF0183FF0BC0EC
+:101830008091DF0184FDEBCF87EE90E022C08091A4
+:10184000DF0183FFF5CF86EE90E01BC08091DF01C2
+:1018500085FF07C089E290E014C08091DF0185FF19
+:10186000F9CF85E390E00DC08091DF0186FF07C0CE
+:101870008AE290E006C08091DF0186FFF9CF81E324
+:1018800090E00E947009089508950C94440C809192
+:10189000630108959FB7F89410925A019FBF9091E9
+:1018A000D601943009F057C09091E9009F703091B3
+:1018B000EC00232F217030FD20E8922B24E02093B0
+:1018C000E9002091EB0020FF43C02091EE0027FFAC
+:1018D0003FC020915801222321F02091E80025FFEC
+:1018E00037C01092580126E03091E80035FD15C050
+:1018F0003091D601343061F53091EB0035FD28C0D0
+:10190000215021F481E08093580122C0EFE9FFE0EB
+:101910003197F1F700C00000E7CF8093F10080918C
+:10192000E80085FD0AC08091E80080FFFCCF80912F
+:10193000E8008E778093E80006C08FB7F89421E026
+:1019400020935A018FBF9F709093E90080E0089523
+:101950009F709093E9008FEF0895CF93DF9300D0AD
+:101960001F92CDB7DEB79C018091D601843019F566
+:1019700093E099833B832A839093E9008FEF9091C2
+:10198000E800815095FD06C095ED9A95F1F70000AD
+:101990008111F5CF8091E80085FF0DC040E050E057
+:1019A00063E070E0CE0101960E944A0F8091E8004A
+:1019B0008E778093E8000F900F900F90DF91CF917A
+:1019C0000895CF93DF9300D01F92CDB7DEB720915B
+:1019D000D601243021F522E029839B838A8383E08A
+:1019E0008093E9008FEF9091E800815095FD06C04B
+:1019F00095ED9A95F1F700008111F5CF8091E800FF
+:101A000085FF0DC040E050E063E070E0CE0101963C
+:101A10000E944A0F8091E8008E778093E8000F9033
+:101A20000F900F90DF91CF9108952091D60124302F
+:101A3000F1F422E02093E9002FEF3091E8002150EB
+:101A400035FD06C035ED3A95F1F700002111F5CFCF
+:101A50002091E80025FF0BC040E050E065E070E019
+:101A60000E944A0F8091E8008E778093E8000895E5
+:101A7000CF93DF932091D601243039F521E02093D4
+:101A8000E9002FEF3091E800215035FD06C035ED1B
+:101A90003A95F1F700002111F5CF2091E80025FFDC
+:101AA00014C0EC0140E050E068E070E00E944A0F92
+:101AB0008091E8008E778093E80088E0FE01ABE536
+:101AC000B1E001900D928A95E1F7DF91CF910895F1
+:101AD0008CE592E00E94A4068091D501811109C095
+:101AE0000E94DF100E943C118091E200846080938C
+:101AF000E200089588E592E00E94A4061092D501C4
+:101B0000089584E592E00C94A40680E592E00C949C
+:101B1000A4068CE492E00E94A4060C94161F209167
+:101B200059012F5F822F62E30E948C2A992319F0BA
+:101B30002093590108951092590180915A018823E8
+:101B400071F18091D601843041F58091E9008F7068
+:101B50002091EC00922F917020FD90E8892B94E069
+:101B60009093E9009091EB0090FF14C09091EE00EB
+:101B700097FF10C09091E80095FF03C01092F1000C
+:101B8000F9CF9091E80090FF05C09091E8009E7712
+:101B90009093E8008F708093E90010925A010895A5
+:101BA00042E061EC81E00E94591042E061EC82E089
+:101BB0000E94591042E061EC83E00E94591042E219
+:101BC00061EC84E00C9459108091D801833009F4C1
+:101BD00053C030F4813071F0823009F48CC0089524
+:101BE0008A3009F478C08B3009F45EC0893009F07E
+:101BF0009AC020C08091D701813A09F094C08091A9
+:101C0000E800877F8093E8008091DB019091DC0100
+:101C1000892B21F468E08BE591E003C060E080E06F
+:101C200090E070E00E94950F8091E8008B778093A0
+:101C3000E80008958091D701813209F074C0809145
+:101C4000DB019091DC01892B09F06DC08091E800E7
+:101C5000877F8093E8008091E80082FD05C0809135
+:101C6000D6018111F8CF5FC08091F10080936301AC
+:101C70008091E8008B7753C08091D701813A09F0B9
+:101C800052C08091DB019091DC01892B09F04BC09F
+:101C90008091E800877F8093E8008091E80080FFD2
+:101CA000FCCF80910A0136C08091D7018132D9F5ED
+:101CB0008091DB019091DC01892BA9F58091E800EE
+:101CC000877F8093E8000E948E108091D9018093D5
+:101CD0000A010C948E188091D701813221F58091F0
+:101CE000E800877F8093E8000E948E108091DA01DF
+:101CF0008093640108958091D701813AA1F4809185
+:101D0000E800877F8093E8008091E80080FFFCCFA7
+:101D1000809164018093F1008091E8008E77809338
+:101D2000E8000C948E10089584B7877F84BF88E103
+:101D30000FB6F89480936000109260000FBE90E0A0
+:101D400080E80FB6F89480936100909361000FBE15
+:101D50000E946E140E94DF100E943C118091E200EC
+:101D600084608093E2008AE49CE00E94B81E78942C
+:101D70000E94C1130E94701480E091E00E94DC1365
+:101D80008BE392E00E94A4068091D601853089F40D
+:101D900087E392E00E94A4060E94DF1E8091D40196
+:101DA000882391F30E94081F882371F30E94340F47
+:101DB000EBCF0E949414E8CF292F3327233031052D
+:101DC000C9F064F42130310581F02230310509F089
+:101DD00043C084E790E026E832E042C0213231057A
+:101DE000F1F02232310541F137C082E190E02AEF73
+:101DF00032E036C099278130910541F0823091055B
+:101E000041F0892B49F5E2E8F2E005C0E4E7F2E0B1
+:101E100002C0E0E6F2E0849190E09F0121C06430CE
+:101E2000D8F4E62FF0E0EE0FFF1FE15EFE4F2081B9
+:101E3000318189E090E014C0643070F470E0FB01FF
+:101E4000EE0FFF1FE95EFE4F20813181FB01ED5E49
+:101E5000FE4F808190E004C080E090E020E030E020
+:101E6000FA0131832083089580E189BD82E189BD33
+:101E700009B400FEFDCF8091D8008F7D8093D800FB
+:101E80008091E00082608093E0008091E00081FD1D
+:101E9000FCCF0895CF92DF92EF92FF920F931F93A2
+:101EA000CF93DF93EC018B016A010E94AD10811189
+:101EB00033C0C114D10439F0F60180819181081B2F
+:101EC000190BC80FD91FE12CF12C0115110519F1BF
+:101ED0008091E80085FD16C08091E8008E778093A0
+:101EE000E800C114D10449F0F60180819181E80E27
+:101EF000F91EF182E08285E00FC00E94AD108823B8
+:101F000021F30AC089918093F10001501109FFEF7C
+:101F1000EF1AFF0ADACF80E0DF91CF911F910F9186
+:101F2000FF90EF90DF90CF9008952091DD013091E8
+:101F3000DE012617370748F06115710539F4209145
+:101F4000E8002E772093E80001C0B90140E0611558
+:101F50007105A9F12091D601222309F443C025304F
+:101F600009F442C02091E80023FD40C02091E80020
+:101F700022FD32C02091E80020FFE9CF4091F3001C
+:101F80002091F20030E0342BFC01CF016115710586
+:101F900059F02830310540F481918093F10061506F
+:101FA00071092F5F3F4FF1CF41E02830310509F033
+:101FB00040E02091E8002E772093E800C8CF41113F
+:101FC000C9CF0AC08091D601882361F0853061F0C5
+:101FD0008091E80083FD0AC08091E80082FFF2CF83
+:101FE00080E0089582E0089583E0089581E00895F7
+:101FF0002091DD013091DE012617370748F0611589
+:10200000710539F42091E8002E772093E80001C093
+:10201000B901FC0120E06115710591F18091D601B3
+:10202000882309F440C0853009F43FC08091E8005E
+:1020300083FD3DC08091E80082FD2FC08091E800C3
+:1020400080FFE9CF2091F3008091F20090E0922B85
+:102050006115710559F08830910540F42491209361
+:10206000F1003196615071090196F2CF21E0089795
+:1020700009F020E08091E8008E778093E800CBCFD4
+:102080002111CCCF0AC08091D601882361F0853020
+:1020900061F08091E80083FD0AC08091E80082FF32
+:1020A000F2CF80E0089582E0089583E0089581E012
+:1020B0000895982F973058F59093E900981739F0C4
+:1020C0007091EC002091ED005091F00003C0242F9E
+:1020D000762F50E021FF19C03091EB003E7F309306
+:1020E000EB003091ED003D7F3093ED003091EB003F
+:1020F00031603093EB007093EC002093ED0050932F
+:10210000F0002091EE0027FF07C09F5FD3CF8F70B4
+:102110008093E90081E0089580E008958091D701DF
+:1021200087FF11C08091E80082FD05C08091D60133
+:102130008111F8CF11C08091E8008B770BC080919E
+:10214000D601882349F08091E80080FFF8CF809184
+:10215000E8008E778093E80008952091E4003091A4
+:10216000E50095E64091EC00842F817040FF22C08D
+:102170008091E80080FD1CC08091D601882391F0F9
+:10218000853091F08091EB0085FD10C04091E40016
+:102190005091E5004217530729F39A01915011F726
+:1021A00084E0089582E0089583E0089581E0089531
+:1021B00080E008954091E80042FFDECF08950E943C
+:1021C0004D110E945511E0EEF0E080818160808326
+:1021D000E8EDF0E080818F77808319BCA7EDB0E057
+:1021E0008C918E7F8C9380818F7E80831092D5011D
+:1021F00008950F931F93CF93DF930E944D110E9478
+:102200005511C8EDD0E088818F77888388818068F8
+:10221000888388818F7D888319BC1092D6011092A3
+:10222000D2011092D4011092D30100EE10E0F80117
+:1022300080818B7F808388818160888342E060E039
+:1022400080E00E945910E1EEF0E080818E7F808373
+:10225000E2EEF0E08081816080838081886080830D
+:10226000F80180818E7F8083888180618883DF91FF
+:10227000CF911F910F910895E8EDF0E080818F7E5E
+:102280008083E7EDF0E080818160808384E082BF1D
+:1022900081E08093D5010C94F910E8EDF0E08081A5
+:1022A0008E7F80831092E20008951092DA001092DF
+:1022B000E10008951F920F920FB60F9211242F93F1
+:1022C0003F934F935F936F937F938F939F93AF93BE
+:1022D000BF93EF93FF938091E10082FF0BC0809149
+:1022E000E20082FF07C08091E1008B7F8093E100D4
+:1022F0000E948F0D8091DA0080FF1FC08091D8006E
+:1023000080FF1BC08091DA008E7F8093DA0080917D
+:10231000D90080FF0DC080E189BD82E189BD09B48B
+:1023200000FEFDCF81E08093D6010E94680D05C0BC
+:1023300019BC1092D6010E947A0D8091E10080FFB5
+:1023400019C08091E20080FF15C08091E2008E7F6D
+:102350008093E2008091E20080618093E2008091AE
+:10236000D80080628093D80019BC85E08093D601A4
+:102370000E94850D8091E10084FF30C08091E200D1
+:1023800084FF2CC080E189BD82E189BD09B400FED3
+:10239000FDCF8091D8008F7D8093D8008091E1009F
+:1023A0008F7E8093E1008091E2008F7E8093E20037
+:1023B0008091E20081608093E2008091D2018823C5
+:1023C00011F084E007C08091E30087FD02C081E046
+:1023D00001C083E08093D6010E94890D8091E100C5
+:1023E00083FF29C08091E20083FF25C08091E10036
+:1023F000877F8093E10082E08093D6011092D20122
+:102400008091E1008E7F8093E1008091E2008E7FD9
+:102410008093E2008091E20080618093E20042E0DC
+:1024200060E080E00E9459108091F0008860809305
+:10243000F0000E94810DFF91EF91BF91AF919F91AC
+:102440008F917F916F915F914F913F912F910F905D
+:102450000FBE0F901F9018951F920F920FB60F92FC
+:1024600011242F933F934F935F936F937F938F9399
+:102470009F93AF93BF93CF93DF93EF93FF93C0915D
+:10248000E900CF708091EC00D82FD17080FDD0E8AA
+:102490001092E9008091F000877F8093F00078949B
+:1024A0000E9470121092E9008091F0008860809381
+:1024B000F000CD2BCF70C093E900FF91EF91DF9139
+:1024C000CF91BF91AF919F918F917F916F915F91CC
+:1024D0004F913F912F910F900FBE0F901F90189525
+:1024E0001F93CF93DF93CDB7DEB7AA970FB6F894BB
+:1024F000DEBF0FBECDBFE7EDF1E088E08E0F90911B
+:10250000F10091938E13FBCF0E94E40D8091E800BF
+:1025100083FF1FC18091D7019091D801492F50E0CE
+:102520004A30510508F015C1FA01EA5AFF4F0C94E0
+:10253000AC2A803881F0823809F00BC18091DB0130
+:102540008F708093E9008091EB0085FB882780F9EC
+:102550001092E90006C08091D3019091D4019111AD
+:1025600082609091E800977F9093E8008093F1005B
+:102570001092F100C8C0282F2D7F09F0EAC08823EF
+:1025800019F0823061F0E5C08091D901813009F005
+:10259000E0C0933009F080E08093D4012BC080919B
+:1025A000D901811127C08091DB018F7009F4D1C05E
+:1025B0008093E9002091EB0020FF1CC0933021F4B0
+:1025C0008091EB00806214C09091EB009061909339
+:1025D000EB0021E030E0A90102C0440F551F8A95AD
+:1025E000E2F74093EA001092EA008091EB008860E5
+:1025F0008093EB001092E9008091E800877F86C00D
+:102600008111A7C01091D9011F778091E3008078D4
+:10261000812B8093E3008091E800877F8093E8001E
+:102620000E948E108091E80080FFFCCF8091E30033
+:1026300080688093E300111102C082E001C083E052
+:102640008093D60186C08058823008F082C0809185
+:10265000D9019091DA018C3D53E0950779F583E03B
+:102660008A838AE289834FB7F894DE01139620E0CB
+:102670003EE051E2E32FF0E050935700E49120FF59
+:1026800003C0E295EF703F5FEF708E2F90E0EA306D
+:1026900010F0C79601C0C0968D939D932F5F243193
+:1026A00049F74FBF8091E800877F8093E8006AE296
+:1026B00070E0CE0101960E94950F14C0AE014F5FED
+:1026C0005F4F6091DB010E94DC0EBC01009709F4B2
+:1026D00040C09091E800977F9093E80089819A81AB
+:1026E0000E94F80F8091E8008B778093E80031C05A
+:1026F000803879F58091E800877F8093E8008091A9
+:10270000D2018093F1008091E8008E778093E800F9
+:102710000E948E101EC081111CC09091D901923070
+:10272000C0F48091E800877F8093E8009093D20105
+:102730000E948E108091D201811106C08091E30029
+:1027400087FD02C081E001C084E08093D6010E9431
+:10275000D00D8091E80083FF0AC08091E800877F58
+:102760008093E8008091EB0080628093EB00AA9652
+:102770000FB6F894DEBF0FBECDBFDF91CF911F9192
+:102780000895CF938091D6018823A1F0C091E900EC
+:10279000CF709091EC00892F817090FD80E8C82B5C
+:1027A0001092E9008091E80083FD0E947012CF70C2
+:1027B000C093E900CF91089590936A0180936901D5
+:1027C0000895E0916901F0916A01309721F001903C
+:1027D000F081E02D099480E00895EF92FF920F932D
+:1027E0001F93CF93DF93E0916901F0916A013097D5
+:1027F000B1F18C010280F381E02D09958091C10136
+:1028000082FF2DC080FF04C086EF93E00E94A406E3
+:10281000E80118E080EFE82E83E0F82E8091C101F6
+:1028200080FF0BC088811F928F93FF92EF920E94CE
+:102830003D070F900F900F900F901150219611119E
+:10284000EDCF8091C10180FF0AC08EEE93E0DF9151
+:10285000CF911F910F91FF90EF900C94A406DF9100
+:10286000CF911F910F91FF90EF900895E091690132
+:10287000F0916A01309721F00480F581E02D0994F0
+:10288000089520916701309168018217930771F0D4
+:102890009093680180936701E0916901F0916A016A
+:1028A000309721F00680F781E02D0994089520915A
+:1028B0006501309166018217930771F0909366016C
+:1028C00080936501E0916901F0916A01309721F0F0
+:1028D0000084F185E02D0994089508950C946D14F9
+:1028E0000E94451F0E9446070C943F20CF93DF9320
+:1028F0001F92CDB7DEB79091C10192FF10C090FF3B
+:102900000EC01F928F9328E034E03F932F9389836A
+:102910000E943D070F900F900F900F9089810F90AC
+:10292000DF91CF910C94450C9F92AF92BF92CF92C2
+:10293000DF92EF92FF920F931F93CF93DF9300D01C
+:1029400000D000D0CDB7DEB70E94690707E010E0E5
+:10295000AA24A394B12C902E802F0E943C089801A9
+:1029600024593E4F6901F901F080F826A1F4015085
+:10297000110988F78FEF89838A831B820E944E1F7B
+:102980008160782F9D838C8349815A816B818D81F1
+:102990000E942B152FC09091C10191FF04C08E831E
+:1029A0000E9445088E8127E030E0A501022E01C07B
+:1029B000440F0A94EAF7E42E4F21C1F029839A824A
+:1029C0008E2191E009F490E09B830E944E1F81606C
+:1029D000782F9D838C8349815A816B818D810E94E0
+:1029E0002B15F6018081E826E08204C021503109D0
+:1029F000E0F6BDCF0E94A92310916B010E94E11364
+:102A00001817B9F00E94E11380936B0126960FB658
+:102A1000F894DEBF0FBECDBFDF91CF911F910F9114
+:102A2000FF90EF90DF90CF90BF90AF909F900C946D
+:102A3000761426960FB6F894DEBF0FBECDBFDF9199
+:102A4000CF911F910F91FF90EF90DF90CF90BF90AB
+:102A5000AF909F900895CF93DF93CDB7DEB72B97BC
+:102A60000FB6F894DEBF0FBECDBF4F83588769877E
+:102A70007A878B87DE01119686E0FD0111928A9597
+:102A8000E9F785E0FE01379601900D928A95E1F70E
+:102A900049815A816B817C818D819E810E942C1B92
+:102AA0002B960FB6F894DEBF0FBECDBFDF91CF914E
+:102AB0000895CF93882309F499C0C82F8CEF8C0F09
+:102AC000813A48F48C2F0E94152881118FC08C2FD9
+:102AD0000E94061E0CC080E28C0F883058F4C7702C
+:102AE00081E001C0880FCA95EAF70E94421ECF918B
+:102AF0000C94891E8BE58C0F833078F4C53A29F04D
+:102B0000C63A31F083E890E005C081E890E002C069
+:102B100082E890E0CF910C94411488E58C0F8331CA
+:102B200008F064C0C83A39F1C93A41F1CA3A49F1EA
+:102B3000CB3A51F1CC3A59F1CD3A61F1C03B69F150
+:102B4000CE3A71F1CF3A79F1C13B81F1C23B89F1C3
+:102B5000C33B91F1C43B99F1C53BA1F1C63BA9F13F
+:102B6000C73BB1F1C83BB9F1C93BC1F1CA3BC9F19F
+:102B700080E090E038C082EE90E035C089EE90E0D1
+:102B800032C08AEE90E02FC085EB90E02CC086EB3F
+:102B900090E029C087EB90E026C08CEC90E023C049
+:102BA0008DEC90E020C083E891E01DC08AE891E0C0
+:102BB0001AC082E991E017C084E991E014C081E273
+:102BC00092E011C083E292E00EC084E292E00BC07A
+:102BD00085E292E008C086E292E005C087E292E0DA
+:102BE00002C08AE292E0CF910C945714CF910895DD
+:102BF000882329F19CEF980F913A18F40E94231E24
+:102C00000DC090E2980F983058F4877091E001C0A1
+:102C1000990F8A95EAF7892F0E94481E0C94891E05
+:102C20009BE5980F933020F480E090E00C944114E1
+:102C3000885A833120F480E090E00C945714089572
+:102C4000882321F00E94421E0C94891E0895882337
+:102C500021F00E94481E0C94891E08957F928F9245
+:102C60009F92AF92BF92CF92DF92EF92FF920F931B
+:102C70001F93CF93DF931F92CDB7DEB77C01C62E93
+:102C8000772EFC01058102950F70128111110E94AF
+:102C90005F1E0E94FF1D882379F0112369F080E2F6
+:102CA0008C0D883048F082E00E94E81D0E94FF1DD4
+:102CB00091E0D82ED92601C0D12CE72DE295EF70F6
+:102CC000F0E0E05AFF4F0C94AC2A872D807F072D4F
+:102CD0000F70882311F00295007F112389F00023E3
+:102CE00009F498C180E28C0D883020F4802F0E9476
+:102CF000421E03C0802F0E94521E0E94891E8AC15C
+:102D00008C2D0E94F815002309F49DC180E28C0DE2
+:102D1000883020F4802F0E94481E03C0802F0E941C
+:102D2000581E0E94891E8FC1872D807F972D9F700E
+:102D3000803211F4892F03C0892F8295807FCC20A7
+:102D400021F0F1E0CF16A1F01DC0112339F00023CE
+:102D500019F1013009F50E94721E75C1002319F0A6
+:102D6000013009F470C189830E94751E898110C1E8
+:102D7000112321F0063008F066C10EC0053008F0BE
+:102D800062C106C1112359F0002331F0F70195818A
+:102D900090FF40C19F7095830E94201654C100236C
+:102DA00009F4F6C03DC1872D86958695837090E025
+:102DB000009719F0019761F046C1112321F08C2D85
+:102DC000972D937002C080E090E00E9441143BC1B7
+:102DD000112321F08C2D972D937002C080E090E09C
+:102DE0000E94571430C18C2D112319F00E942F22FC
+:102DF00002C00E9497220E941C2325C1872D837048
+:102E000009F052C011111FC18C2D829586958770D3
+:102E1000880F880F9C2D9F70892E912CA12CB12C8E
+:102E2000082E04C0880C991CAA1CBB1C0A94D2F75B
+:102E3000C4FE14C00FE010E020E030E0B901A801AA
+:102E400004C0440F551F661F771F8A95D2F7CB0128
+:102E5000BA01609570958095909503C060E070E030
+:102E6000CB01272D26952695237030E022303105A1
+:102E700069F02330310589F0682979298A299B294D
+:102E80002130310571F00E94741CDDC06829792958
+:102E90008A299B290E94901CD6C00E94741CC501DF
+:102EA000B4010E94581CCFC0112319F0872D8170E6
+:102EB00001C08695882309F4C6C08C2D829586951D
+:102EC0008770880F880F9C2D9F70892E912CA12CC4
+:102ED000B12C082E04C0880C991CAA1CBB1C0A9497
+:102EE000D2F7C4FE14C00FE010E020E030E0B901DA
+:102EF000A80104C0440F551F661F771F8A95D2F79B
+:102F0000CB01BA01609570958095909503C060E003
+:102F100070E0CB01272D269526952370422F50E097
+:102F20004230510569F04330510589F0682979290B
+:102F30008A299B294130510571F00E944E1D83C0A2
+:102F4000682979298A299B290E946A1D7CC00E94D0
+:102F50004E1DC501B4010E94321D75C08C2D90E03C
+:102F6000FC01E05EF109E531F10508F04FC0E059E0
+:102F7000FF4F0C94AC2A0C2D0F70872D8F711123ED
+:102F800021F00E94CB1C802F07CF0E94EC1C802FC9
+:102F90000E94271658C0112341F0053008F053C095
+:102FA000872D8F710E94111D4EC0063008F04BC056
+:102FB000F7CF112339F0872D8F710E94CB1C43C0AE
+:102FC0001123C9F3872D8F710E94EC1C3CC0112383
+:102FD00029F0872D8F710E94B61C35C00E94AC1C51
+:102FE00032C0112351F0172D1F71812F0E94CB1C6D
+:102FF00063E0812F0E94DF1D26C081E00E94E81D52
+:10300000023008F182E00E94E81D1DC0112331F05A
+:10301000002389F28C2D0E94591515C0002391F2CE
+:103020008C2D0E94F8150FC0472D4F706C2DC701D5
+:103030000E948B080E94D01B06C0472D4F706C2D3C
+:10304000C7010E944A09DD20F9F00E94DB1D80FDC6
+:103050001BC0F70112820E94D51D0E94CB1CC70124
+:103060000E9453180E94D51D0F90DF91CF911F91A0
+:103070000F91FF90EF90DF90CF90BF90AF909F9017
+:103080008F907F900C94EC1C0F90DF91CF911F914B
+:103090000F91FF90EF90DF90CF90BF90AF909F90F7
+:1030A0008F907F9008950F931F93CF93DF93EC0140
+:1030B000888199812B813C81232BB9F09F3F11F4AA
+:1030C0008F3F99F0CE010E94A208882371F0688199
+:1030D00079818A810E94D11D8C010E94861D0E94E7
+:1030E0004D1CB801CE010E942E16DF91CF911F9189
+:1030F0000F9108950E945F1E0E946F1E0E94341E51
+:103100000E94891E0E944F240E941C2380E090E0B0
+:103110000E94411480E090E00C9457140E944F1ECE
+:103120000C947A180E94C61D292F22952F7030E02A
+:103130002C3031054CF42A3031056CF42250310921
+:1031400022303105A8F407C02C30310569F02F304A
+:10315000310551F00DC0803F69F018F4803E40F415
+:1031600009C0843F29F406C093FB882780F908959D
+:1031700080E0089581E00895CF93DF9300D000D0E0
+:103180001F92CDB7DEB70F900F900F900F900F905A
+:10319000DF91CF910895CF93DF9300D000D000D07E
+:1031A000CDB7DEB726960FB6F894DEBF0FBECDBF03
+:1031B000DF91CF9108951F93CF93DF93C091740156
+:1031C00016E080917501C81799F0D0E01C9FF001BE
+:1031D0001D9FF00D1124EA58FE4F408151816281FC
+:1031E0007381848195810E94CB182196C770E9CFA5
+:1031F000DF91CF911F9108954091A6015091A701B1
+:103200006091A8017091A9018091AA019091AB01F0
+:103210000C94CB188091AB0182958F7009F054C04B
+:103220008091A801882309F44FC080917401A09176
+:1032300075016091A6017091A7014091A90150917B
+:10324000AA01B6E08A1709F43FC090E04115510584
+:10325000C1F17F3F11F46F3FA1F1B89FF001B99F19
+:10326000F00D1124EA58FE4F218172132AC02081EB
+:10327000621327C02281211124C0238134812417A5
+:10328000350710F421503109241B350B283C31053A
+:10329000C0F42091AB012F7020612093AB0126E098
+:1032A000289FF001299FF00D1124E558FE4F8081E1
+:1032B0008F708061808386EA91E00E9453180C949D
+:1032C000DB1801968770BECF0895CF92DF92EF9200
+:1032D000FF920F931F93CF93DF93CDB7DEB7629723
+:1032E0000FB6F894DEBF0FBECDBF8C0185E0F801AC
+:1032F000DE011D9601900D928A95E1F7D8014C915F
+:1033000011965C91119712966C9112971396CD902D
+:10331000DC9014973091A6017091A7018091A901CA
+:103320009091AA01009709F46BC17F3F19F43F3FC8
+:1033300009F466C1E090A801EE2009F4C0C0209114
+:10334000AB01C816D90628F0F601E81BF90BCF012E
+:1033500004C0809590958C0D9D1DFF24F394883CAE
+:10336000910578F0F12C207F09F0C6C07C2DD98A18
+:10337000C88A89890E94BC1886EA91E00E94531885
+:10338000B1C0822F807F09F046C0751314C034137A
+:1033900012C0611110C02F7020612093AB010E94F8
+:1033A000FC1886EA91E00E9453188091AB01D80185
+:1033B00015968C932EC0CD2819F15F3F11F44F3F25
+:1033C000F9F0F62E61111CC08091740120917501F5
+:1033D00036E0821709F45AC090E0389FF001399F17
+:1033E000F00D1124EA58FE4F7181571306C0708109
+:1033F000471303C07281711103C001968770E9CF32
+:10340000F62E662309F418C18091AB018160809388
+:10341000AB01F12C11C1751308C0341306C0611142
+:1034200004C08091AB01D801C3C04D875E878D85F4
+:103430009E856A8B0E9492186A898823E1F166232F
+:10344000D1F12091AB01822F82958F7090E002978D
+:1034500074F08091A6019091A70198878F831986B7
+:10346000DB86CA862C87CE0107960E94531886E019
+:10347000F801A6EAB1E001900D928A95E1F70E9469
+:103480000A190E94FC18FF24F394D6C04D875E876A
+:103490008D859E850E94C61D292F22952F7030E0B4
+:1034A000223031050CF0BCC09F7009F0B6C0805EC0
+:1034B000883008F4C1C0C8010E945318E4CFC81670
+:1034C000D90608F453C0F601E81BF90BCF01883C7C
+:1034D000910508F450C0F12C7C2DD98AC88A8989BD
+:1034E0000E94BC18E6EAF1E086E0DF011D928A95B1
+:1034F000E9F70E94FC18A0C0751314C0341312C061
+:10350000611110C08091AB01F8018583C8010E9450
+:10351000531886E0E6EAF1E0DF011D928A95E9F7AB
+:10352000FE2C8AC04D875E878D859E856A8B0E94A2
+:1035300092186A89882309F4BECF662309F4BBCFA9
+:103540002091AB01822F82958F7090E002970CF44E
+:103550008ECF8091A6019091A7019A8389831B82C7
+:10356000DD82CC822E83CE0101967FCF809590950F
+:103570008C0D9D1DACCFF62E662309F49CCF7513E0
+:103580002EC034132CC02091AB0120FD1FC0822F10
+:1035900082958F70D9F0D80115962C9315978F309E
+:1035A00049F08F5F982F9295907F822F8F70892B93
+:1035B00015968C93C8010E94531886E0F801A6EA7C
+:1035C000B1E001900D928A95E1F793CF86E0F80182
+:1035D000A6EAB1E001900D928A95E1F72DC04D87E2
+:1035E0005E878D859E850E949218811140CF8091C3
+:1035F000AB0181608093AB01C8010E9453181CC0CD
+:10360000662309F458CF4D875E878D859E850E947D
+:103610009218882309F44FCF2ACF811148CF0CC0CC
+:10362000243031050CF047CF9F7009F440CFF801EA
+:103630009581907F09F03BCF8F2D62960FB6F8945D
+:10364000DEBF0FBECDBFDF91CF911F910F91FF90D5
+:10365000EF90DF90CF9008951F93CF93DF93CDB776
+:10366000DEB72C970FB6F894DEBF0FBECDBF4F83E9
+:10367000588769877A878B879C87CE0107960E9437
+:103680006519882369F08F8198852A853B85232BCE
+:10369000F1F19F3F09F063C08F3F09F060C037C070
+:1036A00086E0FE013796DE01119601900D928A9513
+:1036B000E1F76F817885EA85FB85309741F17F3F9F
+:1036C00011F46F3F21F12091750130E0C90101969D
+:1036D000877099274091740150E08417950709F489
+:1036E00047C069837A83FD83EC8396E0929FD00183
+:1036F000939FB00D1124AA58BE4FFE013196019040
+:103700000D929A95E1F7809375010E94DB1816E0FF
+:1037100080917401909175018917C1F1189FC001C2
+:1037200011248A589E4F0E946519882379F1E091EF
+:1037300074011E9FF0011124EA58FE4F408151810F
+:1037400062817381848195810E94CB18809174017C
+:1037500090E001968770992780937401D9CF4F81AB
+:10376000588569857A858B859C850E94CB18CFCF3B
+:103770000E948E181092750110927401E6EAF1E031
+:1037800086E0DF011D928A95E9F7C1CF2C960FB62E
+:10379000F894DEBF0FBECDBFDF91CF911F9108958A
+:1037A000EF92FF920F931F93CF93DF938C010097BB
+:1037B00009F46CC0F12CEE24E394E8012196F801A1
+:1037C0008491843740F4843008F051C0813081F016
+:1037D000823019F15BC0853709F444C0A8F19CE739
+:1037E000980F903708F052C08F770E94F81541C0AB
+:1037F0000E5F1F4FFE01C49180E28C0F883048F4A9
+:10380000C7708E2D01C0880FCA95EAF70E94621E0C
+:1038100014C08C2F0E9459152DC00E5F1F4FFE0142
+:10382000C49180E28C0F883058F4C7708E2D01C08F
+:10383000880FCA95EAF70E94681E0E94891E1AC066
+:103840008C2F0E94F81516C00E5F1F4FFE01C49109
+:10385000CC2381F08FE99FE00197F1F700C00000D1
+:10386000C150F6CF0E5F1F4FFE01F49003C00E94BF
+:1038700059158E018F2D882309F49FCFEFE9FFE0C2
+:103880003197F1F700C000008150F5CFDF91CF9163
+:103890001F910F91FF90EF90089508956093B001EC
+:1038A0007093B1018093B2019093B3010C947A1894
+:1038B0000F931F930091B0011091B1012091B201BB
+:1038C0003091B301DC01CB01802B912BA22BB32BC8
+:1038D0008093B0019093B101A093B201B093B30172
+:1038E0001F910F910C947A180F931F930091B001C0
+:1038F0001091B1012091B2013091B301DC01CB01F3
+:1039000080239123A223B3238093B0019093B1012C
+:10391000A093B201B093B3011F910F910C947A1848
+:103920000F931F930091B0011091B1012091B2014A
+:103930003091B301DC01CB0180279127A227B32767
+:103940008093B0019093B101A093B201B093B30101
+:103950001F910F910C947A181092AC011092AD0146
+:103960001092AE011092AF010C947A1841E050E031
+:1039700060E070E004C0440F551F661F771F8A95F2
+:10398000D2F74093AC015093AD016093AE017093B8
+:10399000AF010C947A1841E050E060E070E004C0A0
+:1039A000440F551F661F771F8A95D2F78091AC018F
+:1039B0009091AD01A091AE01B091AF01482B592B70
+:1039C0006A2B7B2B4093AC015093AD016093AE0109
+:1039D0007093AF010C947A1841E050E060E070E021
+:1039E00004C0440F551F661F771F8A95D2F7409574
+:1039F0005095609570958091AC019091AD01A0912A
+:103A0000AE01B091AF01482359236A237B23409331
+:103A1000AC015093AD016093AE017093AF010C9473
+:103A20007A1841E050E060E070E004C0440F551F98
+:103A3000661F771F8A95D2F78091AC019091AD01F6
+:103A4000A091AE01B091AF01482759276A277B2783
+:103A50004093AC015093AD016093AE017093AF0100
+:103A60000C947A180F931F930091AC011091AD0143
+:103A70002091AE013091AF01DC01CB01802B912B65
+:103A8000A22BB32B8093AC019093AD01A093AE0118
+:103A9000B093AF011F910F910C947A180F931F935D
+:103AA0000091AC011091AD012091AE013091AF01B8
+:103AB000DC01CB0180239123A223B3238093AC01AB
+:103AC0009093AD01A093AE01B093AF011F910F9100
+:103AD0000C947A180F931F930091AC011091AD01D3
+:103AE0002091AE013091AF01DC01CB0180279127FD
+:103AF000A227B3278093AC019093AD01A093AE01B0
+:103B0000B093AF011F910F910C947A180895CF9242
+:103B1000DF92EF92FF920F931F93CF93DF938C016D
+:103B2000C090B001D090B101E090B201F090B3012B
+:103B30008091AC019091AD01A091AE01B091AF0127
+:103B4000C82AD92AEA2AFB2ACFE1D0E0D701C60148
+:103B50000C2E04C0B695A795979587950A94D2F731
+:103B600080FF06C0B8018C2F0E94A70B019721F49B
+:103B7000219760F780E001C08C2FDF91CF911F91DA
+:103B80000F91FF90EF90DF90CF900895CF93DF9348
+:103B9000EC010E94871DBE010E94A70BDF91CF910F
+:103BA0000895CB010E94C61D08958091B4018595AA
+:103BB0008595859508958091B4018770089598E062
+:103BC000899F90011124262B2093B4010C94CB1CC7
+:103BD0002091B401809582238093B401982F97702F
+:103BE00069F430E0482F552747FD509524173507D5
+:103BF00029F08595859585950C94EC1C08959091F8
+:103C0000B401977081E009F480E0089520910B01E0
+:103C100030910C01F90132969FEF40E05191581715
+:103C200089F09F3F19F4511101C0942F4F5F463026
+:103C3000A9F79F3F39F0F901E90FF11D97FDFA95BA
+:103C400082830895089520910B0130910C01F901B0
+:103C50003296285F3F4F9081981301C010823196B1
+:103C6000E217F307C1F7089581E090E0E0910B01BE
+:103C7000F0910C01E80FF91F108201968830910530
+:103C8000A9F708959091C001892B8093C0010895F0
+:103C900080959091C00189238093C001089510926E
+:103CA000C00108959091BF01892B8093BF010895B1
+:103CB00080959091BF0189238093BF010895109250
+:103CC000BF0108959091BE01892B8093BE01089594
+:103CD00080959091BE0189238093BE010895109232
+:103CE000BE0108958093B50108951092B50108951D
+:103CF00080910B0190910C01FC0131969C01285F91
+:103D00003F4F80E0919191118F5FE217F307D1F758
+:103D10000895E0910B01F0910C018091C001808326
+:103D2000E0910B01F0910C0190818091BF01892BF2
+:103D30008083E0910B01F0910C0190818091BE0194
+:103D4000892B80838091B501882361F0E0910B017C
+:103D5000F0910C019081892B80830E94781E811143
+:103D60001092B50180910B0190910C010C94ED1310
+:103D70009093330180933201089520E0009739F049
+:103D8000AC0141505109842395232F5FF7CF822F37
+:103D900008958295982F9C7C392F36953695282F3B
+:103DA000237344E0249FC0011124932F982B292FC3
+:103DB0002A7A2695892F8575880F822B0895809100
+:103DC000D601843021F11092C20120E488E190E014
+:103DD0000FB6F894A895809360000FBE2093600002
+:103DE00080E00E94450C83B7817F846083BF83B7E6
+:103DF000816083BF7894889583B78E7F83BF88E185
+:103E00000FB6F89480936000109260000FBE089582
+:103E10000E9489080E9469070E948A080E9471080E
+:103E200091E0811101C090E0892F08950E948E18C1
+:103E30000E94E1130C94450C1F920F920FB60F9243
+:103E400011248F939F93AF93BF938091C2018111EF
+:103E500013C08091C3019091C401A091C501B0919C
+:103E6000C6014196A11DB11D8093C3019093C40169
+:103E7000A093C501B093C601BF91AF919F918F915F
+:103E80000F900FBE0F901F90189582E084BD93E0B5
+:103E900095BD9AEF97BD80936E0008952FB7F89463
+:103EA0008091C3019091C401A091C501B091C60158
+:103EB0002FBF08952FB7F8946091C3017091C4018A
+:103EC0008091C5019091C6012FBF0895CF92DF92D6
+:103ED000EF92FF920F931F932FB7F8944091C30175
+:103EE0005091C4016091C5017091C6012FBF6A0154
+:103EF0007B01EE24FF248C0120E030E0C016D106C7
+:103F0000E206F30610F4415051099A01281B390BBF
+:103F1000C9011F910F91FF90EF90DF90CF9008950E
+:103F2000CF92DF92EF92FF920F931F932FB7F894E7
+:103F3000C090C301D090C401E090C501F090C601CB
+:103F40002FBF97018601061B170B280B390BC616CE
+:103F5000D706E806F90618F0C901B80106C0C9017C
+:103F6000B80161507109810991091F910F91FF906A
+:103F7000EF90DF90CF9008951F920F920FB60F929F
+:103F800011248F939F93AF93BF938091C30190911E
+:103F9000C401A091C501B091C6010196A11DB11D3A
+:103FA0008093C3019093C401A093C501B093C6014F
+:103FB000BF91AF919F918F910F900FBE0F901F9067
+:103FC00018950E94DF10F8942FEF87EA91E62150B0
+:103FD00080409040E1F700C0000087E090EBDC01FA
+:103FE0008093E0019093E101A093E201B093E3019B
+:103FF0009CE088E10FB6F894A895809360000FBE0E
+:1040000090936000FFCFEF92FF920F931F93CF9397
+:10401000DF93D82FC7E08C2F0E943C0807E010E008
+:10402000E82EF12CC701002E02C0959587950A94C1
+:10403000E2F780FF09C0602F7C2F80E00E944B09CF
+:10404000D81302C081E006C00150110958F7C150D1
+:1040500010F780E0DF91CF911F910F91FF90EF90CB
+:104060000895CF93C82F8CE20E940320882321F06B
+:104070008C2FCF910C94032080E0CF910895CF93A3
+:104080000E948721811102C00E946D2188E294E084
+:104090000E94A406C5E6C15049F00E9469078FE35B
+:1040A0009CE90197F1F700C00000F5CF81E294E0B0
+:1040B0000E94A40689E20E94312081110CC18AE28B
+:1040C0000E94312081110E946D2185E00E943120E3
+:1040D00081110E94E11F0E9492218093C10187E01B
+:1040E0000E9431208823A9F18BE10E94312088238E
+:1040F00051F08091C10181FB222720F991E09227A4
+:1041000090FB81F90EC08EE00E943120882361F07F
+:104110008091C10182FB222720F991E0922790FB38
+:1041200082F98093C10115C080E10E9431209091F5
+:10413000C101882341F093FB222720F981E08227E7
+:1041400080FB93F904C0892F809580FB90F99093B0
+:10415000C1018091C1010E9496210E94A4218093F7
+:10416000DF0180EE0E943120882341F08091DF0141
+:10417000982F909590FB80F98093DF0189E30E944E
+:104180003120882359F08091DF0181FB222720F91B
+:1041900091E0922790FB81F98093DF0182EE0E94EB
+:1041A0003120882359F08091DF0182FB222720F9FA
+:1041B00091E0922790FB82F98093DF0186EE0E94C6
+:1041C0003120882359F08091DF0183FB222720F9D9
+:1041D00091E0922790FB83F98093DF0183EE0E94A8
+:1041E0003120882359F08091DF0184FB222720F9B8
+:1041F00091E0922790FB84F98093DF0185E30E9490
+:104200003120882359F08091DF0185FB222720F996
+:1042100091E0922790FB85F98093DF0181E30E9472
+:104220003120882359F08091DF0186FB222720F975
+:1042300091E0922790FB86F98093DF0181E10E9453
+:104240003120882359F08091DF0187FB222720F954
+:1042500091E0922790FB87F98093DF018091DF0145
+:104260000E94A82187E20E943120C82F8EE10E947F
+:1042700031208111C2608FE10E9431208111C46020
+:1042800080E20E9431208111C86081E20E943120C9
+:104290008111C06182E20E9431208111C06283E2FB
+:1042A0000E9431208111C06484E20E943120882361
+:1042B00011F0C06802C0CC2329F08C2F0E949F21EE
+:1042C0006C2F03C00E949B21682F70E080E090E07B
+:1042D000CF910C944E1CCF9108956DEE7EEF80E04F
+:1042E00090E00E94E62A60E082E090E00E94D42AFA
+:1042F00060E083E090E00E94D42A60E084E090E0F7
+:104300000E94D42A60E085E090E00C94D42A80E0FA
+:1043100090E00E94CE2A21E08D3E9E4F09F020E0E1
+:10432000822F089582E090E00C94C62A682F82E0E4
+:1043300090E00C94D42A83E090E00C94C62A682F75
+:1043400083E090E00C94D42A84E090E00C94C62A98
+:10435000682F84E090E00C94D42A8091C90180FFFA
+:104360000BC06091100185E0689FB0011124759524
+:104370006795759567952BC081FF09C06091100105
+:1043800085E0689FB00111247595679520C082FF74
+:1043900007C06091100185E0689FB001112417C02B
+:1043A0009091CA019923D1F060910F01961788F777
+:1043B0002091100185E0289F90011124929FA00177
+:1043C000939F500D112470E0CA010E94982A603812
+:1043D000710540F46115710539F002C065E070E0C7
+:1043E000862F08958FE7089581E008958091C9018F
+:1043F00080FF08C060910E0170E075956795759516
+:10440000679521C081FF06C060910E0170E075952F
+:10441000679519C082FF04C060910E0170E010C062
+:104420009091CA019923C1F060910D019617A0F7F0
+:1044300080910E01899FC001112470E00E94982A8A
+:104440006038710528F46115710521F0862F0895F3
+:104450008FE7089581E0089561E070E0F4CF803F38
+:1044600021F40E94AD21819504C0813F29F40E946E
+:10447000AD218093CD010895823F21F40E94AD21AA
+:10448000819504C0833F29F40E94AD218093CC0123
+:104490000895893F19F40E94F62105C08A3F31F43E
+:1044A0000E94F62181958093CE0108958B3F21F4DF
+:1044B0000E94F621819504C08C3F29F40E94F621C8
+:1044C0008093CF010895843F21F48091CB018160D6
+:1044D00017C0853F21F48091CB01826011C0863FD7
+:1044E00021F48091CB0184600BC0873F21F480913F
+:1044F000CB01886005C0883F31F48091CB01806199
+:104500008093CB0108958D3F21F48091C901816092
+:104510000BC08E3F21F48091C901826005C08F3F9E
+:1045200029F48091C90184608093C9010895803F76
+:1045300039F48091CD0187FF6CC01092CD0169C024
+:10454000813F29F48091CD011816BCF362C090918F
+:10455000CC01823F29F497FF5CC01092CC0159C076
+:10456000833F19F41916CCF354C0893F41F480916C
+:10457000CE0118160CF04DC01092CE014AC08A3FF1
+:1045800029F48091CE0187FF44C0F6CF8B3F39F4E8
+:104590008091CF0187FF3DC01092CF013AC08C3F80
+:1045A00029F48091CF011816BCF333C0843F21F465
+:1045B0008091CB018E7F17C0853F21F48091CB0184
+:1045C0008D7F11C0863F21F48091CB018B7F0BC082
+:1045D000873F21F48091CB01877F05C0883F31F46C
+:1045E0008091CB018F7E8093CB0113C08D3F21F44E
+:1045F0008091C9018E7F0BC08E3F21F48091C9014B
+:104600008D7F05C08F3F29F48091C9018B7F8093F6
+:10461000C9018091CC0181110EC08091CD01811121
+:104620000AC08091CE01811106C08091CF01811115
+:1046300002C01092CA0108958091C10183FF7EC01B
+:1046400084E694E00E94A4068091CB011F928F9390
+:104650008FE594E09F938F930E943D078DE594E052
+:104660000E94A4068091CC01282F332727FD309586
+:104670003F938F938AE594E09F938F930E943D0729
+:1046800088E594E00E94A4068091CD01282F33276D
+:1046900027FD30953F938F9385E594E09F938F930B
+:1046A0000E943D0783E594E00E94A4068091CE011C
+:1046B000282F332727FD30953F938F9380E594E093
+:1046C0009F938F930E943D078EE494E00E94A4067E
+:1046D0008091CF01282F332727FD30953F938F936B
+:1046E0008BE494E09F938F930E943D0788E494E0CD
+:1046F0000E94A4068091CA011F928F9385E494E0E2
+:104700009F938F930E943D0783E494E00E94A40648
+:104710008091C9011F928F9380E494E09F938F93BF
+:104720000E943D078DE394E00E94A4068DB79EB7DA
+:104730004C960FB6F8949EBF0FBE8DBF8BEC91E0E8
+:104740000E9436140E944E1F9093C8018093C701A7
+:1047500008951F93CF93DF938091C7019091C80173
+:104760000E94661FAC019091CA01992321F020910B
+:10477000110130E006C0209112018AE0289F9001CB
+:1047800011244217530708F486C08091CC01C091D0
+:10479000CD01D091CE011091CF01811107C0C1117F
+:1047A00076C0D11174C0111172C075C09F3F19F04D
+:1047B0009F5F9093CA01181624F40E94AD21809344
+:1047C000CC018091CC0187FF05C00E94AD2181956D
+:1047D0008093CC011C1624F40E94AD218093CD015E
+:1047E0008091CD0187FF05C00E94AD218195809306
+:1047F000CD016091CC01662339F1C091CD01CC236C
+:1048000019F1772767FD7095872F972F0E949D29B3
+:1048100023E333E343E35FE30E94012A0E946A2912
+:104820006093CC016C2F772767FD7095872F972FAA
+:104830000E949D2923E333E343E35FE30E94012ABF
+:104840000E946A296093CD011D1624F40E94F6216E
+:104850008093CE018091CE0187FF05C00E94F62192
+:1048600081958093CE01111624F40E94F621809345
+:10487000CF018091CF0187FF05C00E94F62181956D
+:104880008093CF01DF91CF911F910C941C239F3F08
+:1048900009F08ECF96CFDF91CF911F910895EBEC69
+:1048A000F1E085E0DF011D928A95E9F71092CA01D7
+:1048B0001092C901089587E896E00E94A4061F920D
+:1048C00081E08F931F9285E08F9389E396E09F9319
+:1048D0008F930E943D070F900F900F900F900F90B5
+:1048E0000F9008958330E9F128F4813061F082302F
+:1048F00009F10895853009F462C008F449C0863092
+:1049000009F474C0089580911201262F30E0280F19
+:10491000311D2F3F310524F4680F6093120103C04D
+:104920008FEF80931201809112011F928F9382E783
+:1049300095E072C080911101262F30E0280F311DC3
+:104940002F3F310524F4680F6093110103C08FEFEE
+:1049500080931101809111011F928F9380E695E061
+:104960005BC080911001262F30E0280F311D2F3FB2
+:10497000310524F4680F6093100103C08FEF80931A
+:104980001001809110011F928F938DE495E044C037
+:1049900080910F01262F30E0280F311D2F3F310568
+:1049A00024F4680F60930F0103C08FEF80930F0111
+:1049B00080910F011F928F9388E395E02DC0809125
+:1049C0000E01262F30E0280F311D2F3F310524F432
+:1049D000680F60930E0103C08FEF80930E018091EA
+:1049E0000E011F928F938FE195E016C080910D010B
+:1049F000262F30E0280F311D2F3F310524F4680F9A
+:104A000060930D0103C08FEF80930D0180910D0124
+:104A10001F928F9384E095E09F938F930E943D07B0
+:104A20000F900F900F900F900895833081F128F42C
+:104A3000813059F08230D1F00895853009F449C0B1
+:104A4000B8F1863009F456C00895809112016817B4
+:104A500020F4861B8093120102C0109212018091F3
+:104A600012011F928F9385EF94E054C08091110141
+:104A7000681720F4861B8093110102C01092110167
+:104A8000809111011F928F9383EE94E043C0809137
+:104A90001001681720F4861B8093100102C0109249
+:104AA0001001809110011F928F9380ED94E032C02D
+:104AB00080910F01681720F4861B80930F0102C0BC
+:104AC00010920F0180910F011F928F938BEB94E056
+:104AD00021C080910E01681720F4861B80930E017F
+:104AE00002C010920E0180910E011F928F9382EAF4
+:104AF00094E010C080910D01681720F4861B80930C
+:104B00000D0102C010920D0180910D011F928F9333
+:104B100087E894E09F938F930E943D070F900F903A
+:104B20000F900F900895CF93C82F1F928F938CE80A
+:104B300097E09F938F930E943D0781E090E0A0E073
+:104B4000B0E0BC01CD0104C0660F771F881F991F1C
+:104B5000CA95D2F70E944E1C0F900F900F900F90A5
+:104B6000CF910C948E18CF938732B0F58E3108F028
+:104B70004AC28E3009F4C4C100F5873009F48DC1F2
+:104B8000A8F4863009F045C28091C101817F8E7FF3
+:104B90008093C1018BEF98E00E94A40684E99CE019
+:104BA0000E94A40681E08093D10175C1883009F488
+:104BB0003FC08B3009F46BC12CC2863109F4E6C1C9
+:104BC00020F4803109F4B0C124C2893109F4C7C18D
+:104BD0008B3109F481C11DC2883309F458C150F4E6
+:104BE000893209F412C2853309F40FC2873209F4FD
+:104BF0000CC20FC2833409F408C228F48A3308F4C3
+:104C000008C2895303C2883409F003C20E948E1877
+:104C100088E79CE00E94A4069FEF23ED80E391507B
+:104C200020408040E1F700C000000E94E11F33C136
+:104C300088E99CE00E94A4068AEF9BE00E94A406FB
+:104C40000E949B211F928F9387EF9BE09F938F93EE
+:104C50000E943D0785EF9BE00E94A4060E949221DE
+:104C6000C82F82EE9BE00E94A4061F92CF938DED89
+:104C70009BE09F938F930E943D078BED9BE00E94EA
+:104C8000A40681ED9BE00E94A4068C2F81701F92E8
+:104C90008F938EEC9BE09F938F930E943D078CEC4B
+:104CA0009BE00E94A40682EC9BE00E94A406C1FB4C
+:104CB000882780F91F928F938FEB9BE09F938F93B0
+:104CC0000E943D078DEB9BE00E94A40681EB9BE0D8
+:104CD0000E94A406C2FB882780F91F928F938EEA58
+:104CE0009BE09F938F930E943D078CEA9BE00E947C
+:104CF000A40683EA9BE00E94A406C3FBCC27C0F96C
+:104D00001F92CF9380EA9BE09F938F930E943D0771
+:104D10008EE99BE00E94A4060E94A421C82F8AE885
+:104D20009BE00E94A4061F92CF9385E89BE09F938F
+:104D30008F930E943D0783E89BE00E94A4068AE6C9
+:104D40009BE00E94A4068C2F81701F928F9387E6B0
+:104D50009BE09F938F930E943D078DB79EB78096EF
+:104D60000FB6F8949EBF0FBE8DBF85E69BE00E94F4
+:104D7000A4068EE49BE00E94A406C1FB882780F96C
+:104D80001F928F938BE49BE09F938F930E943D072C
+:104D900089E49BE00E94A40687E39BE00E94A406AE
+:104DA000C2FB882780F91F928F9384E39BE09F9337
+:104DB0008F930E943D0782E39BE00E94A40680E25D
+:104DC0009BE00E94A406C3FB882780F91F928F9363
+:104DD0008DE19BE09F938F930E943D078BE19BE0C9
+:104DE0000E94A40681E19BE00E94A406C4FB8827E0
+:104DF00080F91F928F938EE09BE09F938F930E9488
+:104E00003D078CE09BE00E94A4068AEF9AE00E9496
+:104E1000A406C5FB882780F91F928F9387EF9AE03D
+:104E20009F938F930E943D0785EF9AE00E94A4060E
+:104E300089ED9AE00E94A406C6FB882780F91F929C
+:104E40008F9386ED9AE09F938F930E943D0784EDA8
+:104E50009AE00E94A4068CEC9AE00E94A406C7FB8C
+:104E6000CC27C0F91F92CF9389EC9AE09F938F9340
+:104E70000E943D0787EC9AE00E94A4068DB79EB77A
+:104E80004C960FB6F8949EBF0FBE8DBF04C082E251
+:104E900099E00E94A406C1E0C1C08091C101C82F61
+:104EA000C095C170C0FB80F98093C101CC2349F04B
+:104EB0008CE69CE00E94A4068091C1018660886017
+:104EC00048C08FE59CE00E94A4068091C101897FC3
+:104ED000877F8093C101DFCF9091C10191FBCC27E7
+:104EE000C0F981E0C827892FC0FB81F98093C101F7
+:104EF000CC2319F082E59CE027C084E49CE0C9CF74
+:104F00009091C10192FBCC27C0F981E0C827892F7D
+:104F1000C0FB82F98093C101CC2319F085E39CE0AA
+:104F200013C085E29CE0B5CF9091C10193FBCC27E3
+:104F3000C0F981E0C827892FC0FB83F98093C101A4
+:104F4000CC2351F089E19CE00E94A4068091C1012C
+:104F500081608093C10162C08CE09CE09ACF8CEEAE
+:104F600098E00E94A40684EC98E00E94A4068EE8D3
+:104F700098E00E94A40681E698E00E94A40682E2DE
+:104F800098E00E94A40687EF97E083CF89EE97E030
+:104F90000E94A4060E94E1131F928F938FEC97E06A
+:104FA0009F938F930E943D0780910A011F928F93D8
+:104FB00088EB97E09F938F930E943D078091640157
+:104FC0001F928F9385EA97E09F938F930E943D07EE
+:104FD0008091C3019091C401A091C501B091C60117
+:104FE000BF93AF939F938F9381E997E09F938F93A4
+:104FF0000E943D078DB79EB742960FB6F8949EBFAC
+:105000000FBE8DBF48CF8D5101C080E00E94932517
+:1050100042CF8AE09CE00E94A406C0E08C2FCF9192
+:10502000089580E0089580E00895CF93C82F80917F
+:10503000D101813071F020F0823009F44BC042C1BF
+:10504000E0910B01F0910C018081823209F03CC1AA
+:1050500007C0E0910B01F0910C018081823261F474
+:105060008C2F0E941128811104C08C2F0E94B3251F
+:105070002FC081E090E02CC08C2F0E94132881115A
+:1050800026C0C431E1F070F4CB3081F0C031D1F4EE
+:105090000E945B2484E897E00E94A40682E080934B
+:1050A000D10115C0C93259F0C83361F48BEF98E0D3
+:1050B0000E94A40688E897E00E94A40608C0109207
+:1050C000D10104C182E897E00E94A406FFC081E0FC
+:1050D0008170FEC0C43228F5CE3108F0C1C0CB309B
+:1050E000A1F1D0F4C73009F0D3C08EE18093120152
+:1050F00082E3809311018AE08093100184E1809320
+:105100000F0188E080930E0188E280930D0188E210
+:1051100096E00E94A406BFC0C33149F1C431C1F07A
+:10512000B7C0CB3409F4A9C028F4C93289F0C83318
+:1051300061F0AEC0C13509F49EC0C23509F499C012
+:10514000CE3409F0A5C06AE09EC00E945B24A3C0D3
+:105150008091D001882319F01092D0019CC085E382
+:1051600096E00E94A40681E08093D101B1C08FE057
+:1051700096E00E94A4068DEF95E00E94A40680911F
+:1051800012011F928F938AEF95E09F938F930E9455
+:105190003D0788EF95E00E94A40686EE95E00E9408
+:1051A000A406809111011F928F9383EE95E09F9347
+:1051B0008F930E943D0781EE95E00E94A40682ED48
+:1051C00095E00E94A406809110011F928F938FECAE
+:1051D00095E09F938F930E943D078DEC95E00E9490
+:1051E000A4068CEB95E00E94A40680910F011F920B
+:1051F0008F9389EB95E09F938F930E943D0787EBF8
+:1052000095E00E94A40682EA95E00E94A40680919F
+:105210000E011F928F938FE995E09F938F930E94C9
+:105220003D078DE995E00E94A40686E895E00E947E
+:10523000A40680910D011F928F9383E895E09F93C0
+:105240008F930E943D0781E895E00E94A4068DB7E8
+:105250009EB748960FB6F8949EBF0FBE8DBF1BC079
+:10526000CE51EC2FF0E0E95DFE4F80818093D001BC
+:1052700012C061E003C061E006C06AE08091D00125
+:105280000E94722408C08091D0010E94152503C09D
+:1052900086E296E013C08091D001882369F01F92C6
+:1052A0008F9380E296E09F938F930E943D070F902B
+:1052B0000F900F900F9004C08DE196E00E94A4061D
+:1052C00081E006C01092D10180E002C080E000CFF2
+:1052D000CF91089504D06894B1118DC0089570D015
+:1052E00088F09F5790F0B92F9927B751A0F0D1F0CF
+:1052F000660F771F881F991F1AF0BA95C9F712C059
+:10530000B13081F077D0B1E0089574C0672F782F65
+:105310008827B85F39F0B93FCCF3869577956795C4
+:10532000B395D9F73EF490958095709561957F4F30
+:105330008F4F9F4F0895E89409C097FB3EF49095D6
+:105340008095709561957F4F8F4F9F4F9923A9F05E
+:10535000F92F96E9BB279395F695879577956795ED
+:10536000B795F111F8CFFAF4BB0F11F460FF1BC031
+:105370006F5F7F4F8F4F9F4F16C0882311F096E9C4
+:1053800011C0772321F09EE8872F762F05C0662372
+:1053900071F096E8862F70E060E02AF09A95660F2B
+:1053A000771F881FDAF7880F9695879597F90895E4
+:1053B00057FD9058440F551F59F05F3F71F04795C6
+:1053C000880F97FB991F61F09F3F79F087950895AB
+:1053D000121613061406551FF2CF4695F1DF08C0CA
+:1053E000161617061806991FF1CF869571056105E7
+:1053F00008940895E894BB2766277727CB0197F98F
+:1054000008950BD078C069D028F06ED018F095239D
+:1054100009F05AC05FC01124EECFCADFA0F3959FF8
+:10542000D1F3950F50E0551F629FF001729FBB278B
+:10543000F00DB11D639FAA27F00DB11DAA1F649F37
+:105440006627B00DA11D661F829F2227B00DA11DEA
+:10545000621F739FB00DA11D621F839FA00D611D70
+:10546000221F749F3327A00D611D231F849F600D91
+:10547000211D822F762F6A2F11249F5750408AF0CA
+:10548000E1F088234AF0EE0FFF1FBB1F661F771F56
+:10549000881F91505040A9F79E3F510570F014C0ED
+:1054A000AACF5F3FECF3983EDCF38695779567953E
+:1054B000B795F795E7959F5FC1F7FE2B880F911D74
+:1054C0009695879597F9089597F99F6780E870E01A
+:1054D00060E008959FEF80EC089500240A9416166A
+:1054E000170618060906089500240A9412161306D2
+:1054F000140605060895092E0394000C11F4882360
+:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B
+:105510007F4F8F4F9F4F0895991B79E004C0991FCB
+:10552000961708F0961B881F7A95C9F780950895FD
+:1055300097FB072E16F4009407D077FD09D00E9440
+:10554000B22A07FC05D03EF4909581959F4F0895AF
+:10555000709561957F4F0895EE0FFF1F0590F491B0
+:10556000E02D0994AA1BBB1B51E107C0AA1FBB1F5A
+:10557000A617B70710F0A61BB70B881F991F5A95DF
+:10558000A9F780959095BC01CD010895F999FECFBA
+:1055900092BD81BDF89A992780B50895A8E1B0E041
+:1055A00042E050E00C94EE2A262FF999FECF92BDEE
+:1055B00081BDF89A019700B4021639F01FBA20BDD8
+:1055C0000FB6F894FA9AF99A0FBE08950196272F0C
+:1055D0000E94D52A0C94D42ADC01CB01FC01F99954
+:1055E000FECF06C0F2BDE1BDF89A319600B40D922F
+:0C55F00041505040B8F70895F894FFCFE8
+:1055FC00470C380D150DE10CAD0C01B60128081443
+:10560C000A321E3F4D3620AF0362032C030C039865
+:10561C0002B102CA02E302010203040506070809EB
+:02562C0000007C
+:00000001FF
diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/keymaps/default/keymap.c
new file mode 100644
index 000000000..bd5dd8372
--- /dev/null
+++ b/keyboards/hhkb/keymaps/default/keymap.c
@@ -0,0 +1,78 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * default HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define HHKB 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE Level: Default Layer
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+
+ |------+------+-----------------------+------+------|
+ | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
+ |------+------+-----------------------+------+------|
+ */
+
+ [BASE] = KEYMAP( // default layer
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
+ KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
+
+
+
+ /* Layer HHKB: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+
+ */
+
+ [HHKB] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+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;
+};
diff --git a/keyboards/hhkb/keymaps/lxol/compiled.hex b/keyboards/hhkb/keymaps/lxol/compiled.hex
new file mode 100644
index 000000000..63d3691c4
--- /dev/null
+++ b/keyboards/hhkb/keymaps/lxol/compiled.hex
@@ -0,0 +1,1421 @@
+:100000000C9493070C94D7070C94D7070C94D7073C
+:100010000C94D7070C94D7070C94D7070C94D707E8
+:100020000C94D7070C94D7070C949B120C946D1367
+:100030000C945D200C94D7070C94D7070C94D70729
+:100040000C94D7070C94D7070C94D7070C94D707B8
+:100050000C94D7070C94FD200C94D7070C94D70769
+:100060000C94D7070C94D7070C94D7070C94D70798
+:100070000C94D7070C94D7070C94D7070C94D70788
+:100080000C94D7070C94D7070C94D7070C94D70778
+:100090000C94D7070C94D7070C94D7070C94D70768
+:1000A0000C94D7070C94D7070C94D707DA13FC13DA
+:1000B000EA14FC13EA1441146414EA14B914CC14BD
+:1000C000A617A617D517D51714183418641964196C
+:1000D0003F186419EF18EF185519641964195E195F
+:1000E000FC18FC18FC18FC18FC18FC18FC18FC1870
+:1000F000FC18FC18FC18FC18FC18FC18FC18FC1860
+:100100000C191A19211928193219253032583A2098
+:10011000253038620A000A722F63203031323334BE
+:100120003536370A0028311F0014001A001644041F
+:10013000461D001B000600200021001500080007D6
+:1001400000090019000500220023001C0017000A06
+:10015000000B00110000001E0029002B00E000E150
+:1001600000E200E3002C002400250018000C000E23
+:10017000000D0010000000310035002A00C0000210
+:1001800052E500E600E700260027001200130033C6
+:10019000450F43360000002D002E0030002F0034A4
+:1001A000003800370000001F0014001A0016460433
+:1001B000441D001B00060020002100150008000758
+:1001C00000090019000500220023001C0017000A86
+:1001D000000B00110000001E0029002B00E000E1D0
+:1001E00000E700E6002C002400250018000C000E9B
+:1001F000000D0010000000310035002A00C0000290
+:1002000052E500E700E60026002700120013003345
+:10021000430F45360000002D002E0030002F003423
+:10022000003800370000003B0001000100A900AACF
+:10023000000100010001003C003D0001000100A898
+:10024000000100010001003E003F0001000100012B
+:10025000005500570000003A00A5003900010001D8
+:100260000001000100010040004100010046004A79
+:100270000054005600000049004C002A00580001BC
+:100280000001000100010042004300470048005007
+:10029000004B004D00000044004500010052004F9B
+:1002A0000051004E0000001F1814181A18161804E8
+:1002B000181D181B180618201821181518081807DB
+:1002C00018091819180518221823181C1817180AC5
+:1002D000180B18111800001E1829182B18E018E127
+:1002E00018E200E3002C182418251818180C180E12
+:1002F000180D1810180000311835182A18C0000100
+:1003000000E518E600E70026182718121813180150
+:10031000000100361800002D182E1830182F183440
+:10032000183818371800001F0814081A08010001AF
+:10033000001D081B080608200821081508080807E2
+:1003400008090819080508220823081C0817080AC4
+:10035000080B08110800001E0829082B08E008E116
+:1003600000E200E3002C082408250818080C080EF9
+:10037000080D0810080000310835082A08C00001DF
+:1003800000E500E600E300260827081208130833FA
+:10039000080F08360800002D082E0830082F0834F2
+:1003A000083808370800001F1414141A141614040F
+:1003B000141D141B140614201421141514081407FA
+:1003C00014091419140514221423141C1417140AE4
+:1003D000140B14111400001E1429142B14E014E142
+:1003E00014E200E3002C142414251418140C140E29
+:1003F000140D1410140000311435142A14C0000117
+:1004000000E514E600E70026142714121413140163
+:10041000000100361400002D142E1430142F143453
+:10042000143814371400001F0414041A04010001C6
+:10043000001D041B040604200421041504080407FD
+:1004400004090419040504220423041C0417040AE3
+:10045000040B04110400001E0429042B04E004E131
+:1004600000E200E3002C042404250418040C040E0C
+:10047000040D0410040000310435042A04C00001F6
+:1004800000E500E600E30026042704120413043309
+:10049000040F04360400002D042E0430042F04340D
+:1004A000043804370400000A44454255473A2065A1
+:1004B0006E61626C65642E0A005B735D004B65794A
+:1004C000626F6172642073746172742E0A005B57EC
+:1004D0005D005B535D005B525D005B445D005B4310
+:1004E0005D001203480048004B00420020006D00F0
+:1004F0006F00640000000C0371002E006D002E00E0
+:100500006B0000000403090409027400040100A048
+:10051000FA09040000010301010009211101000191
+:10052000223F000705810308000A090401000103B6
+:10053000010200092111010001224D00070582037B
+:1005400008000A090402000103000000092111014A
+:1005500000012236000705830308000A090403008E
+:1005600002030000000921110100012220000705FB
+:10057000840320000107050403200001120110017B
+:1005800000000008EDFEFECA040101020001063170
+:10059000FF0974A1010975150025FF9520750881D3
+:1005A000020976150025FF952075089102C0050106
+:1005B0000980A101850216010026B7001A01002A50
+:1005C000B700751095018100C0050C0901A10185D6
+:1005D00003160100269C021A01002A9C0275109540
+:1005E000018100C005010902A1010901A10005095D
+:1005F000190129051500250195057501810295014F
+:10060000750381010501093009311581257F9502A6
+:100610007508810609381581257F950175088106C1
+:10062000050C0A38021581257F950175088106C0E1
+:10063000C005010906A101050719E029E7150025F4
+:100640000195087501810295017508810105081958
+:100650000129059505750191029501750391010523
+:1006600007190029FF150025FF950675088100C0B0
+:100670000A002530325820006B6579626F61726420
+:100680005F7265706F72743A20004B6579626F61BA
+:100690007264204C4544732073746174653A20255C
+:1006A000780A00646F6E652E0A00626F6F676D6175
+:1006B000676963207363616E3A202E2E2E20002915
+:1006C0000A002575002F002575005D2800256400AF
+:1006D0002000256400200025640020002564007CA3
+:1006E0000025303258006D6F7573656B6579205B3E
+:1006F00062746E7C782079207620685D287265703F
+:100700002F61636C293A205B006D6B5F77686565CC
+:100710006C5F74696D655F746F5F6D6178203D20FB
+:1007200025640A006D6B5F776865656C5F6D617845
+:100730005F7370656564203D2025640A006D6B5F02
+:1007400074696D655F746F5F6D6178203D2025640D
+:100750000A006D6B5F6D61785F7370656564203D45
+:100760002025640A006D6B5F696E74657276616C3A
+:10077000203D2025640A006D6B5F64656C61792003
+:100780003D2025640A006D6B5F776865656C5F745A
+:10079000696D655F746F5F6D6178203D2025640A27
+:1007A000006D6B5F776865656C5F6D61785F737016
+:1007B000656564203D2025640A006D6B5F74696D7A
+:1007C000655F746F5F6D6178203D2025640A006D60
+:1007D0006B5F6D61785F7370656564203D20256493
+:1007E0000A006D6B5F696E74657276616C203D20E6
+:1007F00025640A006D6B5F64656C6179203D20257E
+:10080000640A000A00257500363A20776865656C31
+:100810005F74696D655F746F5F6D61783A20000A7F
+:1008200000257500353A20776865656C5F6D6178E5
+:100830005F73706565643A20000A00257500343ADC
+:100840002074696D655F746F5F6D61783A20000A8E
+:1008500000257500333A206D61785F7370656564BB
+:100860003A20000A00257500323A20696E746572DC
+:1008700076616C286D73293A20000A0025750031D5
+:100880003A2064656C6179282A31306D73293A20E9
+:10089000000A092D2056616C756573202D0A004DE4
+:1008A0003E004D25643E20003F0073657420646562
+:1008B0006661756C740A00433E2000776865726556
+:1008C0002064656C74613A20637572736F723D25A4
+:1008D000642C20776865656C3D25640A5365652046
+:1008E000687474703A2F2F656E2E77696B69706526
+:1008F0006469612E6F72672F77696B692F4D6F7511
+:1009000073655F6B6579730A000A092D204D6F7559
+:1009100073656B6579202D0A4553432F713A097130
+:100920007569740A313A0964656C6179282A313035
+:100930006D73290A323A09696E74657276616C28A2
+:100940006D73290A333A096D61785F737065656468
+:100950000A343A0974696D655F746F5F6D61780A76
+:10096000353A09776865656C5F6D61785F737065AE
+:1009700065640A363A09776865656C5F74696D6508
+:100980005F746F5F6D61780A0A703A097072696E00
+:10099000742076616C7565730A643A097365742016
+:1009A00064656661756C74730A75703A092B310A57
+:1009B000646F776E3A092D310A706775703A092BAA
+:1009C00031300A7067646F776E3A092D31300A0A48
+:1009D0007370656564203D2064656C7461202A2015
+:1009E0006D61785F7370656564202A202872657078
+:1009F000656174202F2074696D655F746F5F6D6130
+:100A000078290A003F004D3E2000433E20004C253F
+:100A1000640A0074696D65725F636F756E743A2065
+:100A20002530346C580A006B6579626F6172645FBF
+:100A300069646C653A2025580A006B6579626F61BC
+:100A400072645F70726F746F636F6C3A2025580A1E
+:100A500000686F73745F6B6579626F6172645F6C5D
+:100A600065647328293A2025580A000A092D205365
+:100A70007461747573202D0A004743433A20342E65
+:100A8000392E32204156522D4C4942433A20312EC4
+:100A9000382E31204156525F415243483A20617608
+:100AA00072350A004F5054494F4E533A204C554628
+:100AB0004120424F4F544D41474943204D4F5553DC
+:100AC000454B45592045585452414B455920434FB9
+:100AD0004E534F4C4520434F4D4D414E44203531F0
+:100AE000320A004255494C443A2031363731386594
+:100AF000662D6469727479202832333A33393A3476
+:100B000039204A756E2020392032303136290A00CA
+:100B10005649443A2030784645454428712E6D2E7A
+:100B20006B29205049443A203078434146452848B3
+:100B3000484B42206D6F6429205645523A20307848
+:100B4000303130340A00444553433A20712E6D2E23
+:100B50006B206B6579626F617264206669726D7774
+:100B600061726520666F722048484B420A000A098C
+:100B70002D2056657273696F6E202D0A000A092DAB
+:100B800020436F6E736F6C65202D0A4553432F71A0
+:100B90003A09717569740A6D3A096D6F7573656B01
+:100BA00065790A000A092D204D61676963202D0AC5
+:100BB000443A094465627567204D657373616765E2
+:100BC00020546F67676C650A583A094D6174726901
+:100BD00078204465627567204D6F646520546F67A7
+:100BE000676C65202D2053686F77206B6579707274
+:100BF000657373657320696E206D61747269782006
+:100C0000677269640A4B3A094B6579626F61726475
+:100C100020446562756720546F67676C65202D20DE
+:100C200053686F77206B6579707265737320726596
+:100C3000706F72740A4D3A094465627567204D6F92
+:100C400075736520546F67676C650A563A09566577
+:100C50007273696F6E0A533A095374617475730A3B
+:100C6000433A09416374697661746520436F6E731A
+:100C70006F6C65204D6F64650A46312D4631303A00
+:100C80000953776974636820746F204C61796572C9
+:100C900020302D392028463130203D204C30290A83
+:100CA000302D393A0953776974636820746F204C8A
+:100CB0006179657220302D390A4553433A095377DB
+:100CC0006974636820746F204C61796572203020EC
+:100CD00028616C7465726E617465206B6579203172
+:100CE000290A47524156453A095377697463682087
+:100CF000746F204C6179657220302028616C7465B6
+:100D0000726E617465206B65792032290A504155F5
+:100D100053453A094A756D7020746F20426F6F74A5
+:100D20006C6F6164657220285265736574290A4589
+:100D30003A095072696E7420454550524F4D205308
+:100D4000657474696E67730A000A002575002E6E5B
+:100D50006B726F3A20000A002575002E7377617060
+:100D60005F6261636B736C6173685F6261636B7315
+:100D7000706163653A20000A002575002E73776163
+:100D8000705F67726176655F6573633A20000A0081
+:100D90002575002E6E6F5F6775693A20000A002581
+:100DA00075002E737761705F72616C745F72677526
+:100DB000693A20000A002575002E737761705F6C18
+:100DC000616C745F6C6775693A20000A00257500D4
+:100DD0002E636170736C6F636B5F746F5F636F6EB4
+:100DE00074726F6C3A20000A002575002E737761CB
+:100DF000705F636F6E74726F6C5F636170736C6F42
+:100E0000636B3A20000A0025303258006B65796D1B
+:100E100061705F636F6E6669672E7261773A20005A
+:100E20000A002575002E6D6F7573653A20000A0063
+:100E30002575002E6B6579626F6172643A20000A35
+:100E4000002575002E6D61747269783A20000A00E1
+:100E50002575002E656E61626C653A20000A0025DA
+:100E60003032580064656275675F636F6E666967EC
+:100E70002E7261773A20000A00257500646566616C
+:100E8000756C745F6C617965723A20003F000A6D81
+:100E90006F7573653A206F66660A000A6D6F757329
+:100EA000653A206F6E0A000A6B6579626F61726441
+:100EB0003A206F66660A000A6B6579626F61726438
+:100EC0003A206F6E0A000A6D61747269783A206F79
+:100ED00066660A000A6D61747269783A206F6E0A5C
+:100EE000000A64656275673A206F66660A000A64E4
+:100EF000656275673A206F6E0A000A0A4A756D705E
+:100F0000696E6720746F20626F6F746C6F616465C7
+:100F1000722E2E2E2000433E20006565636F6E66A4
+:100F200069673A0A000011241FBECFEFDAE0DEBF86
+:100F3000CDBF04B603FE24C08091E0019091E10191
+:100F4000A091E201B091E3018730904BA740B04BF4
+:100F5000B9F41092E0011092E1011092E2011092B6
+:100F6000E30114BE84B7877F84BF88E10FB6F8948D
+:100F700080936000109260000FBEE0E0FFE30995EF
+:100F800011E0A0E0B1E0EEE7F8E502C005900D92B7
+:100F9000A233B107D9F711E0A2E3B1E001C01D927D
+:100FA000A03EB107E1F70E94D50F0C943D2C0C94A4
+:100FB0000000FF93EF93E0913201F09133013097FD
+:100FC00009F00995EF91FF910895FC01859180301A
+:100FD00011F0EFDFFBCF0895FF27E0E230E247FF9B
+:100FE0000CC0419597FF09C0EDE260957095809522
+:100FF0009095611D711D811D911D27FF02C02195D6
+:1010000030E350E2AA27660F771F881F991FAA1F97
+:10101000A41710F0A41B63955A95A9F7AA3008F0FD
+:10102000A95FA05DAF93F3956115710581059105E9
+:1010300041F7ED3211F4EF93F395F21718F43F9363
+:10104000F395FBCF8F91B5DFFA95E1F70895E9911C
+:10105000F9918591803021F0853219F0AADFF9CF1E
+:10106000089520E0E89455915532C1F3503311F4BE
+:10107000689455915A3348F4505390F3220F022E3E
+:10108000220F220F200D250FF4CF0EF42195899108
+:101090009991533619F3533729F1533559F1BC015E
+:1010A00088279927E8945C3621F48991999168946E
+:1010B0005591543639F446EF7EF077FF0DC08FEF2F
+:1010C0009FEF0AC055374AE039F0583540E121F02A
+:1010D000523642E009F00895FF93EF937DDFEF91E0
+:1010E000FF91B7CFFF93EF93FC0181918030B9F36B
+:1010F00060DFFBCFFF93EF9368DFF1CFDF93CF93F8
+:10110000CDB7DEB72596A3DFCF91DF9108958FEF9E
+:1011100084B980E485B957985F9A2E9A2F98ECE3AA
+:10112000F1E088E08E0F11928E13FDCFE4E3F1E041
+:1011300088E08E0F11928E13FDCF8CE391E0909397
+:1011400047018093460184E391E0909345018093A9
+:1011500044010895EF92FF920F931F93CF93DF9373
+:1011600080914401909145012091460130914701C1
+:1011700030934501209344019093470180934601A9
+:10118000C0E0D0E0EE24E394F12C0FEF10E020E07B
+:1011900030E085B1807C8C2BA90193E0440F551F72
+:1011A0009A95E1F7842B85B98AE18A95F1F700C019
+:1011B000E0914401F0914501EC0FFD1F808190E02A
+:1011C000022E02C0959587950A94E2F780FD2F9A2A
+:1011D00095E39A95F1F70000E6B52E988AE18A9595
+:1011E000F1F700C04091460150914701DA01AC0F80
+:1011F000BD1F4F9B0AC0C701022E01C0880F0A9471
+:10120000EAF780959C91892308C06C91C701022E52
+:1012100001C0880F0A94EAF7862B8C9386B56E2F4F
+:1012200070E08E1728F086B590E0861B970B06C0FD
+:10123000E6B5C801861B970B8E0F911D069758F0D7
+:10124000E0914401F0914501EC0FFD1F8081FA010E
+:10125000EC0FFD1F80839AE19A95F1F700C02F985B
+:101260002E9A8BE291E00197F1F700C000002F5F0A
+:101270003F4F2830310509F08CCFA0914601B09145
+:101280004701AC0FBD1FE0914401F0914501EC0F07
+:10129000FD1F9C918081981751F00E949B206093C4
+:1012A00048017093490180934A0190934B01219624
+:1012B000C830D10509F06BCF8091D601853021F07F
+:1012C0008091D601811111C060914801709149014E
+:1012D00080914A0190914B010E94D1206131774267
+:1012E0008105910510F00E94202081E0DF91CF91CF
+:1012F0001F910F91FF90EF9008952091460130913A
+:101300004701F901E80FF11D808108950F931F93A4
+:10131000CF93DF9386E191E00E94E507C0E0D0E043
+:101320000AE011E0E0914601F0914701EC0FFD1F4A
+:1013300080810E940A201F928F93DF93CF931F9387
+:101340000F930E947E0821960F900F900F900F90A0
+:101350000F900F90C830D10529F7DF91CF911F91E1
+:101360000F9108951F93CF93DF93C7E0D0E010E073
+:10137000E0914601F0914701EC0FFD1F808190E064
+:101380000E94FE1F180F219798F7812FDF91CF91B0
+:101390001F9108950895089561110BC0FC01828189
+:1013A000882321F085EE0E949A1603C085EE0E94E4
+:1013B000391780E090E0089581E0089581E0089574
+:1013C0000C94DE0908950F931F93CF93DF938C0144
+:1013D000FC01C081D181CE010E94C81EBE010E94C5
+:1013E0008C0AEC01B8010E94E009882309F48DC041
+:1013F000F8018281882309F44AC080915701811144
+:101400001FC0C431F0E5DF0709F051C00E94E209B6
+:1014100081E0809357010E948F2090935601809322
+:10142000550110924E011092500110924F011092EE
+:10143000520110925101109254011092530165C053
+:1014400080915501909156010E94A720883C9105FA
+:1014500070F480914E01E82FF0E0EE0FFF1FE15B8A
+:10146000FE4FD183C0838F5F80934E014EC0C4383E
+:1014700080E5D80721F0C538D04501F13AC0F80120
+:101480008281882341F010924C0182E01EC0C43852
+:10149000E0E5DE0759F580914C01811106C086E236
+:1014A0000E949A1686E20E94391782E01CC0C43856
+:1014B000F0E5DF0741F3C538D045D9F4F801828162
+:1014C000882331F010924D0180E20E9461171DC007
+:1014D00080914D01811106C087E20E949A1687E231
+:1014E0000E94391780E20E9468170FC0C538D045A6
+:1014F00029F381E080934C0180934D01C801DF9175
+:10150000CF911F910F910C94DC0980E0DF91CF9176
+:101510001F910F9108950895E72FF0E098E0899FBB
+:10152000E00DF11D112483E0EE0FFF1F8A95E1F716
+:10153000E60FF11DEE0FFF1FE95DFE4F85919491BF
+:101540000895880F991FFC01EB55F0408591949107
+:101550000895880F991FFC01EB5DFE4F85919491D2
+:1015600008950F931F93CF93DF93EC01811520E330
+:10157000920750F5C11580E2D80708F0C3C0CB3BF5
+:10158000D10590F4C83AD10508F06AC0C53AD10532
+:1015900008F05BC0C430D10508F0D4C1219709F030
+:1015A000CEC101E010E00EC2CF3FD10511F008F02E
+:1015B000C9C1C03FD10508F0A2C0CE01805E91092B
+:1015C000089708F4BFC1BBC1C13090E5D90709F441
+:1015D000A2C020F5C0318FE4D80770F4C11590E4A3
+:1015E000D90708F094C0C11521E3D20708F0A7C1BC
+:1015F000DD278E01106CE6C1C115D04509F09FC1F1
+:101600000E94CF198FEF94E32CE08150904020404E
+:10161000E1F700C000000E942221D4C1C11597E566
+:10162000D90758F4C03121E5D20708F020C1C431F0
+:1016300080E5D80708F479C082C1CE0190578115A2
+:10164000904108F07CC1DF7077C1C53AD10509F43B
+:101650007BC1C63AD10509F07AC102E810E4B2C1F3
+:10166000C83AD10509F476C1C93AD10509F475C162
+:10167000CA3AD10509F474C1CB3AD10509F473C152
+:10168000CC3AD10509F472C1CD3AD10509F471C142
+:10169000C03BD10509F470C1CE3AD10509F46FC140
+:1016A000CF3AD10509F46EC1C13BD10509F46DC132
+:1016B000C23BD10509F46CC1C33BD10509F46BC130
+:1016C000C43BD10509F46AC1C53BD10509F469C120
+:1016D000C63BD10509F468C1C73BD10509F467C110
+:1016E000C83BD10509F466C1C93BD10509F465C100
+:1016F000CA3BD10509F464C100E014E463C18E0162
+:10170000106560C1CE019F700E94A90A5CC1DF70A4
+:101710008E01106A57C187EA94E00E94E507809124
+:10172000C10181608093C1014DC10E94C822811115
+:1017300002C00E94AE220E94E52290E09093E00158
+:101740008093DF01C23080E5D80721F48091DF016A
+:10175000816086C0C43090E5D90721F48091DF0113
+:1017600082607EC0C63020E5D20721F48091DF017F
+:10177000846076C0C83080E5D80719F48091DF0115
+:1017800027C0CA3090E5D90721F48091DF0180613C
+:1017900067C0CC3020E5D20721F48091DF01806260
+:1017A0005FC0CE3080E5D80721F48091DF018064EE
+:1017B00057C0C03190E5D90721F48091DF018068DE
+:1017C0004FC0C23120E5D20729F48091DF01846047
+:1017D000886046C0C33080E5D80721F48091DF01DE
+:1017E0008E7F3EC0C53090E5D90721F48091DF019E
+:1017F0008D7F36C0C73020E5D20721F48091DF010C
+:101800008B7F2EC0C93080E5D80719F48091DF01A5
+:1018100026C0CB3090E5D90721F48091DF018F7E7F
+:101820001FC0CD3020E5D20721F48091DF018F7DEC
+:1018300017C0CF3080E5D80721F48091DF018F7B7E
+:101840000FC0C13190E5D90721F48091DF018F7776
+:1018500007C0C331D04531F48091DF018B7F877F92
+:101860008093DF018091DF010E94E922ABC08D2FC0
+:1018700099278F70992781309105D9F49E012370A3
+:10188000332702C0880F991F2A95E2F79C688E01C2
+:1018900044E0000F111F4A95E1F700271370802BD9
+:1018A000912B53E0CC0FDD1F5A95E1F7C076DD2771
+:1018B0002FC08230910531F4DC2FCC278E01016FCF
+:1018C000106A80C08330910569F4CE018370992736
+:1018D00001E010E002C0000F111F8A95E2F7C80175
+:1018E0009C680FC084309105B9F4CE0183709927AC
+:1018F00001E010E002C0000F111F8A95E2F7C80155
+:101900009A6823E0CC0FDD1F2A95E1F7C07ED770DF
+:101910008C010C2B1D2B56C08530910531F4DC2F2A
+:10192000CC278E01046F106A4DC0069709F04AC09B
+:10193000CF71DD27DC2FCC278E01106243C000E081
+:1019400010E040C08E013EC001E810E43BC003E857
+:1019500010E438C002EE14E435C009EE14E432C0DD
+:101960000AEE14E42FC005EB14E42CC006EB14E4DB
+:1019700029C007EB14E426C00CEC14E423C00DECE2
+:1019800014E420C003E815E41DC00AE815E41AC0F9
+:1019900002E915E417C004E915E414C001E216E4F5
+:1019A00011C003E216E40EC004E216E40BC005E227
+:1019B00016E408C006E216E405C007E216E402C019
+:1019C0000AE216E4C801DF91CF911F910F910895AB
+:1019D000E72FF0E098E0899FE00DF11D112483E0EE
+:1019E000EE0FFF1F8A95E1F7E60FF11DEE0FFF1FC7
+:1019F000E95DFE4F85919491803E9105E0F4803C35
+:101A0000910558F58133910509F46FC048F4893286
+:101A1000910509F463C08A32910509F46DC072C062
+:101A200089339105E9F082389105D1F0853391052C
+:101A300009F44DC067C0833E910581F138F4803EC2
+:101A40009105B9F0823E9105D9F05CC0863E9105C2
+:101A500061F1873E9105A1F155C00E94A10A089548
+:101A60002091DF0120FD02C021FF4CC080EE90E0FC
+:101A700049C08091DF0180FFF9CF89E390E042C047
+:101A80008091DF0182FF0EC08091DF0184FF03C0DF
+:101A900080E090E037C083EE90E034C08091DF01B9
+:101AA00082FFF2CF82EE90E02DC08091DF0183FFB4
+:101AB0000BC08091DF0184FDEBCF87EE90E022C068
+:101AC0008091DF0183FFF5CF86EE90E01BC080910F
+:101AD000DF0185FF07C089E290E014C08091DF013B
+:101AE00085FFF9CF85E390E00DC08091DF0186FF8F
+:101AF00007C08AE290E006C08091DF0186FFF9CF3F
+:101B000081E390E00E94B10A089508950C94850D38
+:101B10008091630108959FB7F89410925A019FBF76
+:101B20009091D601943009F057C09091E9009F70D0
+:101B30003091EC00232F217030FD20E8922B24E01F
+:101B40002093E9002091EB0020FF43C02091EE009C
+:101B500027FF3FC020915801222321F02091E80067
+:101B600025FF37C01092580126E03091E80035FD7E
+:101B700015C03091D601343061F53091EB0035FD60
+:101B800028C0215021F481E08093580122C0EFE960
+:101B9000FFE03197F1F700C00000E7CF8093F1003C
+:101BA0008091E80085FD0AC08091E80080FFFCCFAD
+:101BB0008091E8008E778093E80006C08FB7F89494
+:101BC00021E020935A018FBF9F709093E90080E03D
+:101BD00008959F709093E9008FEF0895CF93DF935E
+:101BE00000D01F92CDB7DEB79C018091D601843022
+:101BF00019F593E099833B832A839093E9008FEF53
+:101C00009091E800815095FD06C095ED9A95F1F709
+:101C100000008111F5CF8091E80085FF0DC040E004
+:101C200050E063E070E0CE0101960E948B1080913D
+:101C3000E8008E778093E8000F900F900F90DF916F
+:101C4000CF910895CF93DF9300D01F92CDB7DEB729
+:101C50002091D601243021F522E029839B838A83B9
+:101C600083E08093E9008FEF9091E800815095FD2B
+:101C700006C095ED9A95F1F700008111F5CF80919E
+:101C8000E80085FF0DC040E050E063E070E0CE0169
+:101C900001960E948B108091E8008E778093E80077
+:101CA0000F900F900F90DF91CF9108952091D60162
+:101CB0002430F1F422E02093E9002FEF3091E80086
+:101CC000215035FD06C035ED3A95F1F700002111A0
+:101CD000F5CF2091E80025FF0BC040E050E065E023
+:101CE00070E00E948B108091E8008E778093E8006E
+:101CF0000895CF93DF932091D601243039F521E068
+:101D00002093E9002FEF3091E800215035FD06C007
+:101D100035ED3A95F1F700002111F5CF2091E8005B
+:101D200025FF14C0EC0140E050E068E070E00E9444
+:101D30008B108091E8008E778093E80088E0FE01A8
+:101D4000ABE5B1E001900D928A95E1F7DF91CF917B
+:101D500008958EED94E00E94E5078091D5018111F0
+:101D600009C00E9420120E947D128091E2008460CE
+:101D70008093E20008958AED94E00E94E5071092B6
+:101D8000D501089586ED94E00C94E50782ED94E08A
+:101D90000C94E5078EEC94E00E94E5070C94572024
+:101DA000209159012F5F822F62E30E94CD2B99234E
+:101DB00019F02093590108951092590180915A0108
+:101DC000882371F18091D601843041F58091E9003A
+:101DD0008F702091EC00922F917020FD90E8892B5C
+:101DE00094E09093E9009091EB0090FF14C09091E3
+:101DF000EE0097FF10C09091E80095FF03C010928D
+:101E0000F100F9CF9091E80090FF05C09091E800B3
+:101E10009E779093E8008F708093E90010925A01AA
+:101E2000089542E061EC81E00E949A1142E061EC89
+:101E300082E00E949A1142E061EC83E00E949A11D4
+:101E400042E261EC84E00C949A118091D8018330D5
+:101E500009F453C030F4813071F0823009F48CC041
+:101E600008958A3009F478C08B3009F45EC0893057
+:101E700009F09AC020C08091D701813A09F094C03E
+:101E80008091E800877F8093E8008091DB0190914A
+:101E9000DC01892B21F468E08BE591E003C060E070
+:101EA00080E090E070E00E94D6108091E8008B778F
+:101EB0008093E80008958091D701813209F074C0C1
+:101EC0008091DB019091DC01892B09F06DC080913C
+:101ED000E800877F8093E8008091E80082FD05C0DC
+:101EE0008091D6018111F8CF5FC08091F10080937D
+:101EF00063018091E8008B7753C08091D701813ACC
+:101F000009F052C08091DB019091DC01892B09F02E
+:101F10004BC08091E800877F8093E8008091E800C3
+:101F200080FFFCCF80910A0136C08091D7018132B9
+:101F3000D9F58091DB019091DC01892BA9F5809185
+:101F4000E800877F8093E8000E94CF118091D9013B
+:101F500080930A010C94CF198091D701813221F529
+:101F60008091E800877F8093E8000E94CF118091E4
+:101F7000DA018093640108958091D701813AA1F438
+:101F80008091E800877F8093E8008091E80080FFDF
+:101F9000FCCF809164018093F1008091E8008E77FE
+:101FA0008093E8000C94CF11089584B7877F84BF95
+:101FB00088E10FB6F89480936000109260000FBE25
+:101FC00090E080E80FB6F8948093610090936100F0
+:101FD0000FBE0E94AF150E9420120E947D128091B8
+:101FE000E20084608093E2008BE89DE00E94F91F8C
+:101FF00078940E9402150E94B11580E091E00E9441
+:102000001D158DEB94E00E94E5078091D601853087
+:1020100089F489EB94E00E94E5070E9420208091DA
+:10202000D401882391F30E944920882371F30E94F0
+:102030007510EBCF0E94D515E8CF292F3327233019
+:102040003105C9F064F42130310581F022303105C9
+:1020500009F043C084E790E028E035E042C0213237
+:102060003105F1F02232310541F137C082E190E0D3
+:102070002CE735E036C099278130910541F0823058
+:10208000910541F0892B49F5E4E0F5E005C0E6EF64
+:10209000F4E002C0E2EEF4E0849190E09F0121C000
+:1020A0006430D8F4E62FF0E0EE0FFF1FE15EFE4F44
+:1020B0002081318189E090E014C0643070F470E0D8
+:1020C000FB01EE0FFF1FE95EFE4F20813181FB0116
+:1020D000ED5EFE4F808190E004C080E090E020E063
+:1020E00030E0FA0131832083089580E189BD82E1E7
+:1020F00089BD09B400FEFDCF8091D8008F7D80930B
+:10210000D8008091E00082608093E0008091E00040
+:1021100081FDFCCF0895CF92DF92EF92FF920F9353
+:102120001F93CF93DF93EC018B016A010E94EE11A4
+:10213000811133C0C114D10439F0F601808191813D
+:10214000081B190BC80FD91FE12CF12C0115110523
+:1021500019F18091E80085FD16C08091E8008E7726
+:102160008093E800C114D10449F0F6018081918187
+:10217000E80EF91EF182E08285E00FC00E94EE11A8
+:10218000882321F30AC089918093F100015011093D
+:10219000FFEFEF1AFF0ADACF80E0DF91CF911F91B6
+:1021A0000F91FF90EF90DF90CF9008952091DD0187
+:1021B0003091DE012617370748F06115710539F4B3
+:1021C0002091E8002E772093E80001C0B90140E09B
+:1021D00061157105A9F12091D601222309F443C0AC
+:1021E000253009F442C02091E80023FD40C0209131
+:1021F000E80022FD32C02091E80020FFE9CF4091A5
+:10220000F3002091F20030E0342BFC01CF01611586
+:10221000710559F02830310540F481918093F10027
+:10222000615071092F5F3F4FF1CF41E028303105F8
+:1022300009F040E02091E8002E772093E800C8CF15
+:102240004111C9CF0AC08091D601882361F0853041
+:1022500061F08091E80083FD0AC08091E80082FF70
+:10226000F2CF80E0089582E0089583E0089581E050
+:1022700008952091DD013091DE012617370748F0DF
+:102280006115710539F42091E8002E772093E8005C
+:1022900001C0B901FC0120E06115710591F1809147
+:1022A000D601882309F440C0853009F43FC08091ED
+:1022B000E80083FD3DC08091E80082FD2FC0809141
+:1022C000E80080FFE9CF2091F3008091F20090E0D8
+:1022D000922B6115710559F08830910540F42491D5
+:1022E0002093F1003196615071090196F2CF21E0FF
+:1022F000089709F020E08091E8008E778093E8004D
+:10230000CBCF2111CCCF0AC08091D601882361F0B8
+:10231000853061F08091E80083FD0AC08091E8007B
+:1023200082FFF2CF80E0089582E0089583E008956F
+:1023300081E00895982F973058F59093E900981709
+:1023400039F07091EC002091ED005091F00003C045
+:10235000242F762F50E021FF19C03091EB003E7FF3
+:102360003093EB003091ED003D7F3093ED003091E4
+:10237000EB0031603093EB007093EC002093ED00A4
+:102380005093F0002091EE0027FF07C09F5FD3CF4E
+:102390008F708093E90081E0089580E00895809136
+:1023A000D70187FF11C08091E80082FD05C08091B0
+:1023B000D6018111F8CF11C08091E8008B770BC056
+:1023C0008091D601882349F08091E80080FFF8CF02
+:1023D0008091E8008E778093E80008952091E400D2
+:1023E0003091E50095E64091EC00842F817040FF2C
+:1023F00022C08091E80080FD1CC08091D601882316
+:1024000091F0853091F08091EB0085FD10C04091F6
+:10241000E4005091E5004217530729F39A019150C7
+:1024200011F784E0089582E0089583E0089581E043
+:10243000089580E008954091E80042FFDECF0895BE
+:102440000E948E120E949612E0EEF0E08081816080
+:102450008083E8EDF0E080818F77808319BCA7ED61
+:10246000B0E08C918E7F8C9380818F7E80831092E0
+:10247000D50108950F931F93CF93DF930E948E127F
+:102480000E949612C8EDD0E088818F77888388817A
+:102490008068888388818F7D888319BC1092D601DB
+:1024A0001092D2011092D4011092D30100EE10E0EC
+:1024B000F80180818B7F808388818160888342E0FE
+:1024C00060E080E00E949A11E1EEF0E080818E7F72
+:1024D0008083E2EEF0E0808181608083808188608B
+:1024E0008083F80180818E7F8083888180618883EA
+:1024F000DF91CF911F910F910895E8EDF0E0808179
+:102500008F7E8083E7EDF0E080818160808384E0CE
+:1025100082BF81E08093D5010C943A12E8EDF0E09F
+:1025200080818E7F80831092E20008951092DA00FD
+:102530001092E10008951F920F920FB60F9211248E
+:102540002F933F934F935F936F937F938F939F93BB
+:10255000AF93BF93EF93FF938091E10082FF0BC095
+:102560008091E20082FF07C08091E1008B7F809321
+:10257000E1000E94D00E8091DA0080FF1FC08091A0
+:10258000D80080FF1BC08091DA008E7F8093DA0034
+:102590008091D90080FF0DC080E189BD82E189BDB5
+:1025A00009B400FEFDCF81E08093D6010E94A90E00
+:1025B00005C019BC1092D6010E94BB0E8091E100AB
+:1025C00080FF19C08091E20080FF15C08091E20079
+:1025D0008E7F8093E2008091E20080618093E20030
+:1025E0008091D80080628093D80019BC85E08093E8
+:1025F000D6010E94C60E8091E10084FF30C0809118
+:10260000E20084FF2CC080E189BD82E189BD09B46C
+:1026100000FEFDCF8091D8008F7D8093D8008091FF
+:10262000E1008F7E8093E1008091E2008F7E8093B5
+:10263000E2008091E20081608093E2008091D2010B
+:10264000882311F084E007C08091E30087FD02C079
+:1026500081E001C083E08093D6010E94CA0E809180
+:10266000E10083FF29C08091E20083FF25C08091B3
+:10267000E100877F8093E10082E08093D601109291
+:10268000D2018091E1008E7F8093E1008091E20091
+:102690008E7F8093E2008091E20080618093E2006F
+:1026A00042E060E080E00E949A118091F000886032
+:1026B0008093F0000E94C20EFF91EF91BF91AF9105
+:1026C0009F918F917F916F915F914F913F912F914A
+:1026D0000F900FBE0F901F9018951F920F920FB67C
+:1026E0000F9211242F933F934F935F936F937F9398
+:1026F0008F939F93AF93BF93CF93DF93EF93FF930A
+:10270000C091E900CF708091EC00D82FD17080FD8E
+:10271000D0E81092E9008091F000877F8093F0006C
+:1027200078940E94B1131092E9008091F0008860C3
+:102730008093F000CD2BCF70C093E900FF91EF9113
+:10274000DF91CF91BF91AF919F918F917F916F91C9
+:102750005F914F913F912F910F900FBE0F901F905F
+:1027600018951F93CF93DF93CDB7DEB7AA970FB617
+:10277000F894DEBF0FBECDBFE7EDF1E088E08E0F2D
+:102780009091F10091938E13FBCF0E94250F8091C1
+:10279000E80083FF1FC18091D7019091D801492F94
+:1027A00050E04A30510508F015C1FA01EA5AFF4FCE
+:1027B0000C94ED2B803881F0823809F00BC18091A8
+:1027C000DB018F708093E9008091EB0085FB882707
+:1027D00080F91092E90006C08091D3019091D40154
+:1027E000911182609091E800977F9093E800809328
+:1027F000F1001092F100C8C0282F2D7F09F0EAC027
+:10280000882319F0823061F0E5C08091D9018130D0
+:1028100009F0E0C0933009F080E08093D4012BC030
+:102820008091D901811127C08091DB018F7009F45B
+:10283000D1C08093E9002091EB0020FF1CC09330B1
+:1028400021F48091EB00806214C09091EB009061C4
+:102850009093EB0021E030E0A90102C0440F551F26
+:102860008A95E2F74093EA001092EA008091EB002B
+:1028700088608093EB001092E9008091E800877FE8
+:1028800086C08111A7C01091D9011F778091E30004
+:102890008078812B8093E3008091E800877F80938C
+:1028A000E8000E94CF118091E80080FFFCCF80916A
+:1028B000E30080688093E300111102C082E001C050
+:1028C00083E08093D60186C08058823008F082C0B1
+:1028D0008091D9019091DA018C3D53E0950779F50B
+:1028E00083E08A838AE289834FB7F894DE011396E6
+:1028F00020E03EE051E2E32FF0E050935700E491F6
+:1029000020FF03C0E295EF703F5FEF708E2F90E0E5
+:10291000EA3010F0C79601C0C0968D939D932F5F4B
+:10292000243149F74FBF8091E800877F8093E8000A
+:102930006AE270E0CE0101960E94D61014C0AE018A
+:102940004F5F5F4F6091DB010E941D10BC0100973B
+:1029500009F440C09091E800977F9093E800898146
+:102960009A810E9439118091E8008B778093E8006A
+:1029700031C0803879F58091E800877F8093E80046
+:102980008091D2018093F1008091E8008E7780934E
+:10299000E8000E94CF111EC081111CC09091D90186
+:1029A0009230C0F48091E800877F8093E800909394
+:1029B000D2010E94CF118091D201811106C0809175
+:1029C000E30087FD02C081E001C084E08093D6016E
+:1029D0000E94110F8091E80083FF0AC08091E800F7
+:1029E000877F8093E8008091EB0080628093EB000A
+:1029F000AA960FB6F894DEBF0FBECDBFDF91CF9180
+:102A00001F910895CF938091D6018823A1F0C091A2
+:102A1000E900CF709091EC00892F817090FD80E8E3
+:102A2000C82B1092E9008091E80083FD0E94B11349
+:102A3000CF70C093E900CF91089590936A0180937D
+:102A400069010895E0916901F0916A01309721F0E0
+:102A50000190F081E02D099480E00895EF92FF92BB
+:102A60000F931F93CF93DF93E0916901F0916A0177
+:102A70003097B1F18C010280F381E02D09958091AE
+:102A8000C10182FF2DC080FF04C088E796E00E944C
+:102A9000E507E80118E082E7E82E86E0F82E80914D
+:102AA000C10180FF0BC088811F928F93FF92EF922C
+:102AB0000E947E080F900F900F900F90115021965A
+:102AC0001111EDCF8091C10180FF0AC080E796E02F
+:102AD000DF91CF911F910F91FF90EF900C94E5073C
+:102AE000DF91CF911F910F91FF90EF900895E091AA
+:102AF0006901F0916A01309721F00480F581E02DA1
+:102B00000994089520916701309168018217930715
+:102B100071F09093680180936701E0916901F091F1
+:102B20006A01309721F00680F781E02D099408951D
+:102B300020916501309166018217930771F090939F
+:102B4000660180936501E0916901F0916A01309717
+:102B500021F00084F185E02D0994089508950C94E6
+:102B6000AE150E9486200E9487080C948021CF9386
+:102B7000DF931F92CDB7DEB79091C10192FF10C0D5
+:102B800090FF0EC01F928F932AE836E03F932F9359
+:102B900089830E947E080F900F900F900F9089817B
+:102BA0000F90DF91CF910C94860D9F92AF92BF92C0
+:102BB000CF92DF92EF92FF920F931F93CF93DF9309
+:102BC00000D000D000D0CDB7DEB70E94AA0807E041
+:102BD00010E0AA24A394B12C902E802F0E947D098E
+:102BE000980124593E4F6901F901F080F826A1F4BB
+:102BF0000150110988F78FEF89838A831B820E9415
+:102C00008F208160782F9D838C8349815A816B81CD
+:102C10008D810E946C162FC09091C10191FF04C05C
+:102C20008E830E9486098E8127E030E0A501022E66
+:102C300001C0440F0A94EAF7E42E4F21C1F0298322
+:102C40009A828E2191E009F490E09B830E948F206C
+:102C50008160782F9D838C8349815A816B818D811E
+:102C60000E946C16F6018081E826E08204C02150A3
+:102C70003109E0F6BDCF0E94EA2410916B010E9459
+:102C800022151817B9F00E94221580936B01269621
+:102C90000FB6F894DEBF0FBECDBFDF91CF911F916D
+:102CA0000F91FF90EF90DF90CF90BF90AF909F90EB
+:102CB0000C94B71526960FB6F894DEBF0FBECDBFA5
+:102CC000DF91CF911F910F91FF90EF90DF90CF9008
+:102CD000BF90AF909F900895CF93DF93CDB7DEB7AD
+:102CE0002B970FB6F894DEBF0FBECDBF4F8358872A
+:102CF00069877A878B87DE01119686E0FD01119244
+:102D00008A95E9F785E0FE01379601900D928A9544
+:102D1000E1F749815A816B817C818D819E810E947E
+:102D20006D1C2B960FB6F894DEBF0FBECDBFDF91A2
+:102D3000CF910895CF93882309F499C0C82F8CEFC1
+:102D40008C0F813A48F48C2F0E94562981118FC034
+:102D50008C2F0E94471F0CC080E28C0F883058F4E3
+:102D6000C77081E001C0880FCA95EAF70E94831FEF
+:102D7000CF910C94CA1F8BE58C0F833078F4C53A41
+:102D800029F0C63A31F083E890E005C081E890E090
+:102D900002C082E890E0CF910C94821588E58C0FF8
+:102DA000833108F064C0C83A39F1C93A41F1CA3AEE
+:102DB00049F1CB3A51F1CC3A59F1CD3A61F1C03BEE
+:102DC00069F1CE3A71F1CF3A79F1C13B81F1C23B61
+:102DD00089F1C33B91F1C43B99F1C53BA1F1C63BDD
+:102DE000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B3D
+:102DF000C9F180E090E038C082EE90E035C089EE05
+:102E000090E032C08AEE90E02FC085EB90E02CC0BD
+:102E100086EB90E029C087EB90E026C08CEC90E038
+:102E200023C08DEC90E020C083E891E01DC08AE8CB
+:102E300091E01AC082E991E017C084E991E014C0E2
+:102E400081E292E011C083E292E00EC084E292E05F
+:102E50000BC085E292E008C086E292E005C087E2FE
+:102E600092E002C08AE292E0CF910C949815CF9143
+:102E70000895882329F19CEF980F913A18F40E9445
+:102E8000641F0DC090E2980F983058F4877091E05D
+:102E900001C0990F8A95EAF7892F0E94891F0C9427
+:102EA000CA1F9BE5980F933020F480E090E00C94CB
+:102EB0008215885A833120F480E090E00C949815B4
+:102EC0000895882321F00E94831F0C94CA1F08953F
+:102ED000882321F00E94891F0C94CA1F08957F92B5
+:102EE0008F929F92AF92BF92CF92DF92EF92FF921A
+:102EF0000F931F93CF93DF931F92CDB7DEB77C0163
+:102F0000C62E772EFC01058102950F7012811111DA
+:102F10000E94A01F0E94401F882379F0112369F0AE
+:102F200080E28C0D883048F082E00E94291F0E94C8
+:102F3000401F91E0D82ED92601C0D12CE72DE29573
+:102F4000EF70F0E0E05AFF4F0C94ED2B872D807F5F
+:102F5000072D0F70882311F00295007F112389F04F
+:102F6000002309F498C180E28C0D883020F4802F72
+:102F70000E94831F03C0802F0E94931F0E94CA1FBC
+:102F80008AC18C2D0E943917002309F49DC180E26B
+:102F90008C0D883020F4802F0E94891F03C0802F61
+:102FA0000E94991F0E94CA1F8FC1872D807F972D75
+:102FB0009F70803211F4892F03C0892F8295807F02
+:102FC000CC2021F0F1E0CF16A1F01DC0112339F083
+:102FD000002319F1013009F50E94B31F75C10023C8
+:102FE00019F0013009F470C189830E94B61F8981EC
+:102FF00010C1112321F0063008F066C10EC0053063
+:1030000008F062C106C1112359F0002331F0F70125
+:10301000958190FF40C19F7095830E94611754C1B4
+:10302000002309F4F6C03DC1872D869586958370EF
+:1030300090E0009719F0019761F046C1112321F04B
+:103040008C2D972D937002C080E090E00E94821535
+:103050003BC1112321F08C2D972D937002C080E08D
+:1030600090E00E94981530C18C2D112319F00E9418
+:10307000702302C00E94D8230E945D2425C1872DA1
+:10308000837009F052C011111FC18C2D8295869555
+:103090008770880F880F9C2D9F70892E912CA12CF2
+:1030A000B12C082E04C0880C991CAA1CBB1C0A94C5
+:1030B000D2F7C4FE14C00FE010E020E030E0B90108
+:1030C000A80104C0440F551F661F771F8A95D2F7C9
+:1030D000CB01BA01609570958095909503C060E032
+:1030E00070E0CB01272D26952695237030E0223005
+:1030F000310569F02330310589F0682979298A2959
+:103100009B292130310571F00E94B51DDDC0682971
+:1031100079298A299B290E94D11DD6C00E94B51DFC
+:10312000C501B4010E94991DCFC0112319F0872D4C
+:10313000817001C08695882309F4C6C08C2D8295C4
+:1031400086958770880F880F9C2D9F70892E912CF3
+:10315000A12CB12C082E04C0880C991CAA1CBB1CE5
+:103160000A94D2F7C4FE14C00FE010E020E030E073
+:10317000B901A80104C0440F551F661F771F8A9527
+:10318000D2F7CB01BA01609570958095909503C0F8
+:1031900060E070E0CB01272D269526952370422F05
+:1031A00050E04230510569F04330510589F06829FB
+:1031B00079298A299B294130510571F00E948F1E7F
+:1031C00083C0682979298A299B290E94AB1E7CC06B
+:1031D0000E948F1EC501B4010E94731E75C08C2D04
+:1031E00090E0FC01E05EF109E531F10508F04FC027
+:1031F000E059FF4F0C94ED2B0C2D0F70872D8F7124
+:10320000112321F00E940C1E802F07CF0E942D1E3B
+:10321000802F0E94681758C0112341F0053008F034
+:1032200053C0872D8F710E94521E4EC0063008F089
+:103230004BC0F7CF112339F0872D8F710E940C1EE0
+:1032400043C01123C9F3872D8F710E942D1E3CC0EE
+:10325000112329F0872D8F710E94F71D35C00E9420
+:10326000ED1D32C0112351F0172D1F71812F0E94C7
+:103270000C1E63E0812F0E94201F26C081E00E9467
+:10328000291F023008F182E00E94291F1DC011236E
+:1032900031F0002389F28C2D0E949A1615C000236C
+:1032A00091F28C2D0E9439170FC0472D4F706C2D55
+:1032B000C7010E94CC090E94111D06C0472D4F7006
+:1032C0006C2DC7010E948B0ADD20F9F00E941C1FA3
+:1032D00080FD1BC0F70112820E94161F0E940C1E67
+:1032E000C7010E9494190E94161F0F90DF91CF9181
+:1032F0001F910F91FF90EF90DF90CF90BF90AF9014
+:103300009F908F907F900C942D1E0F90DF91CF9106
+:103310001F910F91FF90EF90DF90CF90BF90AF90F3
+:103320009F908F907F9008950F931F93CF93DF937B
+:10333000EC01888199812B813C81232BB9F09F3F3F
+:1033400011F48F3F99F0CE010E94E309882371F0B8
+:10335000688179818A810E94121F8C010E94C71E98
+:103360000E948E1DB801CE010E946F17DF91CF9190
+:103370001F910F9108950E94A01F0E94B01F0E94EC
+:10338000751F0E94CA1F0E9490250E945D2480E044
+:1033900090E00E94821580E090E00C9498150E94C5
+:1033A000901F0C94BB190E94071F292F22952F7084
+:1033B00030E02C3031054CF42A3031056CF42250C9
+:1033C000310922303105A8F407C02C30310569F0ED
+:1033D0002F30310551F00DC0803F69F018F4803E68
+:1033E00040F409C0843F29F406C093FB882780F984
+:1033F000089580E0089581E00895CF93DF9300D091
+:1034000000D01F92CDB7DEB70F900F900F900F90A6
+:103410000F90DF91CF910895CF93DF9300D000D02C
+:1034200000D0CDB7DEB726960FB6F894DEBF0FBE3C
+:10343000CDBFDF91CF9108951F93CF93DF93C091BC
+:10344000740116E080917501C81799F0D0E01C9FB7
+:10345000F0011D9FF00D1124EA58FE4F408151816B
+:1034600062817381848195810E940C1A2196C770B4
+:10347000E9CFDF91CF911F9108954091A60150911E
+:10348000A7016091A8017091A9018091AA01909172
+:10349000AB010C940C1A8091AB0182958F7009F0EE
+:1034A00054C08091A801882309F44FC08091740111
+:1034B000A09175016091A6017091A7014091A901A9
+:1034C0005091AA01B6E08A1709F43FC090E0411577
+:1034D0005105C1F17F3F11F46F3FA1F1B89FF00199
+:1034E000B99FF00D1124EA58FE4F218172132AC0B2
+:1034F0002081621327C02281211124C023813481BD
+:103500002417350710F421503109241B350B283CB2
+:103510003105C0F42091AB012F7020612093AB01E5
+:1035200026E0289FF001299FF00D1124E558FE4F59
+:1035300080818F708061808386EA91E00E94941977
+:103540000C941C1A01968770BECF0895CF92DF921B
+:10355000EF92FF920F931F93CF93DF93CDB7DEB718
+:1035600062970FB6F894DEBF0FBECDBF8C0185E029
+:10357000F801DE011D9601900D928A95E1F7D801C0
+:103580004C9111965C91119712966C91129713962B
+:10359000CD90DC9014973091A6017091A701809195
+:1035A000A9019091AA01009709F46BC17F3F19F41A
+:1035B0003F3F09F466C1E090A801EE2009F4C0C0C5
+:1035C0002091AB01C816D90628F0F601E81BF90BCB
+:1035D000CF0104C0809590958C0D9D1DFF24F39420
+:1035E000883C910578F0F12C207F09F0C6C07C2D35
+:1035F000D98AC88A89890E94FD1986EA91E00E94C9
+:103600009419B1C0822F807F09F046C0751314C091
+:10361000341312C0611110C02F7020612093AB01D0
+:103620000E943D1A86EA91E00E9494198091AB01B4
+:10363000D80115968C932EC0CD2819F15F3F11F457
+:103640004F3FF9F0F62E61111CC08091740120915A
+:10365000750136E0821709F45AC090E0389FF001F6
+:10366000399FF00D1124EA58FE4F7181571306C09F
+:103670007081471303C07281711103C00196877076
+:10368000E9CFF62E662309F418C18091AB01816061
+:103690008093AB01F12C11C1751308C0341306C01F
+:1036A000611104C08091AB01D801C3C04D875E8712
+:1036B0008D859E856A8B0E94D3196A898823E1F1E2
+:1036C0006623D1F12091AB01822F82958F7090E01B
+:1036D000029774F08091A6019091A70198878F833B
+:1036E0001986DB86CA862C87CE0107960E9494191C
+:1036F00086E0F801A6EAB1E001900D928A95E1F723
+:103700000E944B1A0E943D1AFF24F394D6C04D87A5
+:103710005E878D859E850E94071F292F22952F7019
+:1037200030E0223031050CF0BCC09F7009F0B6C00B
+:10373000805E883008F4C1C0C8010E949419E4CFAB
+:10374000C816D90608F453C0F601E81BF90BCF01DF
+:10375000883C910508F450C0F12C7C2DD98AC88A88
+:1037600089890E94FD19E6EAF1E086E0DF011D92F9
+:103770008A95E9F70E943D1AA0C0751314C034134E
+:1037800012C0611110C08091AB01F8018583C8019E
+:103790000E94941986E0E6EAF1E0DF011D928A9525
+:1037A000E9F7FE2C8AC04D875E878D859E856A8BE2
+:1037B0000E94D3196A89882309F4BECF662309F4CD
+:1037C000BBCF2091AB01822F82958F7090E0029742
+:1037D0000CF48ECF8091A6019091A7019A838983E2
+:1037E0001B82DD82CC822E83CE0101967FCF809515
+:1037F00090958C0D9D1DACCFF62E662309F49CCFC1
+:1038000075132EC034132CC02091AB0120FD1FC0B6
+:10381000822F82958F70D9F0D80115962C93159729
+:103820008F3049F08F5F982F9295907F822F8F7005
+:10383000892B15968C93C8010E94941986E0F80193
+:10384000A6EAB1E001900D928A95E1F793CF86E068
+:10385000F801A6EAB1E001900D928A95E1F72DC03A
+:103860004D875E878D859E850E94D319811140CF3B
+:103870008091AB0181608093AB01C8010E949419D3
+:103880001CC0662309F458CF4D875E878D859E85C1
+:103890000E94D319882309F44FCF2ACF811148CF32
+:1038A0000CC0243031050CF047CF9F7009F440CF95
+:1038B000F8019581907F09F03BCF8F2D62960FB66E
+:1038C000F894DEBF0FBECDBFDF91CF911F910F9156
+:1038D000FF90EF90DF90CF9008951F93CF93DF93E9
+:1038E000CDB7DEB72C970FB6F894DEBF0FBECDBFB5
+:1038F0004F83588769877A878B879C87CE01079685
+:103900000E94A61A882369F08F8198852A853B85B5
+:10391000232BF1F19F3F09F063C08F3F09F060C096
+:1039200037C086E0FE013796DE01119601900D92B8
+:103930008A95E1F76F817885EA85FB85309741F1BB
+:103940007F3F11F46F3F21F12091750130E0C901F3
+:103950000196877099274091740150E0841795076C
+:1039600009F447C069837A83FD83EC8396E0929FD4
+:10397000D001939FB00D1124AA58BE4FFE0131967D
+:1039800001900D929A95E1F7809375010E941C1A9F
+:1039900016E080917401909175018917C1F1189F0B
+:1039A000C00111248A589E4F0E94A61A882379F1DB
+:1039B000E09174011E9FF0011124EA58FE4F4081EE
+:1039C000518162817381848195810E940C1A80915A
+:1039D000740190E001968770992780937401D9CF84
+:1039E0004F81588569857A858B859C850E940C1A44
+:1039F000CFCF0E94CF191092750110927401E6EAA0
+:103A0000F1E086E0DF011D928A95E9F7C1CF2C969F
+:103A10000FB6F894DEBF0FBECDBFDF91CF911F91DF
+:103A20000895EF92FF920F931F93CF93DF938C0132
+:103A3000009709F46CC0F12CEE24E394E801219680
+:103A4000F8018491843740F4843008F051C081300B
+:103A500081F0823019F15BC0853709F444C0A8F1C8
+:103A60009CE7980F903708F052C08F770E94391763
+:103A700041C00E5F1F4FFE01C49180E28C0F883061
+:103A800048F4C7708E2D01C0880FCA95EAF70E94CE
+:103A9000A31F14C08C2F0E949A162DC00E5F1F4FBB
+:103AA000FE01C49180E28C0F883058F4C7708E2DCF
+:103AB00001C0880FCA95EAF70E94A91F0E94CA1F79
+:103AC0001AC08C2F0E94391716C00E5F1F4FFE01BF
+:103AD000C491CC2381F08FE99FE00197F1F700C0FA
+:103AE0000000C150F6CF0E5F1F4FFE01F49003C0DF
+:103AF0000E949A168E018F2D882309F49FCFEFE93B
+:103B0000FFE03197F1F700C000008150F5CFDF9161
+:103B1000CF911F910F91FF90EF90089508956093BA
+:103B2000B0017093B1018093B2019093B3010C94F2
+:103B3000BB190F931F930091B0011091B101209117
+:103B4000B2013091B301DC01CB01802B912BA22B70
+:103B5000B32B8093B0019093B101A093B201B093C5
+:103B6000B3011F910F910C94BB190F931F930091F8
+:103B7000B0011091B1012091B2013091B301DC018B
+:103B8000CB0180239123A223B3238093B001909390
+:103B9000B101A093B201B093B3011F910F910C94A6
+:103BA000BB190F931F930091B0011091B1012091A7
+:103BB000B2013091B301DC01CB0180279127A2270C
+:103BC000B3278093B0019093B101A093B201B09359
+:103BD000B3011F910F910C94BB191092AC0110927C
+:103BE000AD011092AE011092AF010C94BB1941E0EF
+:103BF00050E060E070E004C0440F551F661F771F5F
+:103C00008A95D2F74093AC015093AD016093AE0119
+:103C10007093AF010C94BB1941E050E060E070E09C
+:103C200004C0440F551F661F771F8A95D2F78091F5
+:103C3000AC019091AD01A091AE01B091AF01482BC4
+:103C4000592B6A2B7B2B4093AC015093AD016093B1
+:103C5000AE017093AF010C94BB1941E050E060E0FD
+:103C600070E004C0440F551F661F771F8A95D2F776
+:103C700040955095609570958091AC019091AD0103
+:103C8000A091AE01B091AF01482359236A237B2351
+:103C90004093AC015093AD016093AE017093AF01BE
+:103CA0000C94BB1941E050E060E070E004C0440FA8
+:103CB000551F661F771F8A95D2F78091AC019091AE
+:103CC000AD01A091AE01B091AF01482759276A27F5
+:103CD0007B274093AC015093AD016093AE0170938C
+:103CE000AF010C94BB190F931F930091AC0110917D
+:103CF000AD012091AE013091AF01DC01CB01802BF1
+:103D0000912BA22BB32B8093AC019093AD01A09388
+:103D1000AE01B093AF011F910F910C94BB190F939B
+:103D20001F930091AC011091AD012091AE01309133
+:103D3000AF01DC01CB0180239123A223B323809325
+:103D4000AC019093AD01A093AE01B093AF011F9170
+:103D50000F910C94BB190F931F930091AC0110911C
+:103D6000AD012091AE013091AF01DC01CB01802784
+:103D70009127A227B3278093AC019093AD01A09324
+:103D8000AE01B093AF011F910F910C94BB19089530
+:103D9000CF92DF92EF92FF920F931F93CF93DF9317
+:103DA0008C01C090B001D090B101E090B201F090D0
+:103DB000B3018091AC019091AD01A091AE01B091A1
+:103DC000AF01C82AD92AEA2AFB2ACFE1D0E0D701DD
+:103DD000C6010C2E04C0B695A795979587950A94B1
+:103DE000D2F780FF06C0B8018C2F0E94E80C019723
+:103DF00021F4219760F780E001C08C2FDF91CF91F3
+:103E00001F910F91FF90EF90DF90CF900895CF9387
+:103E1000DF93EC010E94C81EBE010E94E80CDF91F6
+:103E2000CF910895CB010E94071F08958091B4019E
+:103E300085958595859508958091B401877008953D
+:103E400098E0899F90011124262B2093B4010C94B3
+:103E50000C1E2091B401809582238093B401982F89
+:103E6000977069F430E0482F552747FD5095241787
+:103E7000350729F08595859585950C942D1E089517
+:103E80009091B401977081E009F480E00895209149
+:103E90000B0130910C01F90132969FEF40E05191F6
+:103EA000581789F09F3F19F4511101C0942F4F5FAB
+:103EB0004630A9F79F3F39F0F901E90FF11D97FD51
+:103EC000FA9582830895089520910B0130910C0199
+:103ED000F9013296285F3F4F9081981301C01082FC
+:103EE0003196E217F307C1F7089581E090E0E09181
+:103EF0000B01F0910C01E80FF91F10820196883038
+:103F00009105A9F708959091C001892B8093C00174
+:103F1000089580959091C00189238093C0010895F0
+:103F20001092C00108959091BF01892B8093BF0129
+:103F3000089580959091BF0189238093BF010895D2
+:103F40001092BF0108959091BE01892B8093BE010C
+:103F5000089580959091BE0189238093BE010895B4
+:103F60001092BE0108958093B50108951092B50195
+:103F7000089580910B0190910C01FC0131969C01F8
+:103F8000285F3F4F80E0919191118F5FE217F30717
+:103F9000D1F70895E0910B01F0910C018091C001DF
+:103FA0008083E0910B01F0910C0190818091BF0121
+:103FB000892B8083E0910B01F0910C01908180911D
+:103FC000BE01892B80838091B501882361F0E09147
+:103FD0000B01F0910C019081892B80830E94B91F05
+:103FE00081111092B50180910B0190910C010C94FC
+:103FF0002E159093330180933201089520E00097AD
+:1040000039F0AC0141505109842395232F5FF7CF3C
+:10401000822F08958295982F9C7C392F369536955E
+:10402000282F237344E0249FC0011124932F982B41
+:10403000292F2A7A2695892F8575880F822B089536
+:104040008091D601843021F11092C20120E488E1F0
+:1040500090E00FB6F894A895809360000FBE20936F
+:10406000600080E00E94860D83B7817F846083BFFB
+:1040700083B7816083BF7894889583B78E7F83BF31
+:1040800088E10FB6F89480936000109260000FBE34
+:1040900008950E94CA090E94AA080E94CB090E94A2
+:1040A000B20991E0811101C090E0892F08950E942A
+:1040B000CF190E9422150C94860D1F920F920FB6F5
+:1040C0000F9211248F939F93AF93BF938091C2015E
+:1040D000811113C08091C3019091C401A091C501C9
+:1040E000B091C6014196A11DB11D8093C30190936B
+:1040F000C401A093C501B093C601BF91AF919F9138
+:104100008F910F900FBE0F901F90189582E084BD85
+:1041100093E095BD9AEF97BD80936E0008952FB7F9
+:10412000F8948091C3019091C401A091C501B09110
+:10413000C6012FBF08952FB7F8946091C301709105
+:10414000C4018091C5019091C6012FBF0895CF92FF
+:10415000DF92EF92FF920F931F932FB7F894409145
+:10416000C3015091C4016091C5017091C6012FBF78
+:104170006A017B01EE24FF248C0120E030E0C016B0
+:10418000D106E206F30610F4415051099A01281BAA
+:10419000390BC9011F910F91FF90EF90DF90CF90E5
+:1041A0000895CF92DF92EF92FF920F931F932FB754
+:1041B000F894C090C301D090C401E090C501F09084
+:1041C000C6012FBF97018601061B170B280B390B61
+:1041D000C616D706E806F90618F0C901B80106C0E8
+:1041E000C901B80161507109810991091F910F91AD
+:1041F000FF90EF90DF90CF9008951F920F920FB62F
+:104200000F9211248F939F93AF93BF938091C3011B
+:104210009091C401A091C501B091C6010196A11D64
+:10422000B11D8093C3019093C401A093C501B093C5
+:10423000C601BF91AF919F918F910F900FBE0F90CC
+:104240001F9018950E942012F8942FEF87EA91E6AC
+:10425000215080409040E1F700C0000087E090EBE3
+:10426000DC018093E0019093E101A093E201B0931F
+:10427000E3019CE088E10FB6F894A8958093600074
+:104280000FBE90936000FFCFEF92FF920F931F93AA
+:10429000CF93DF93D82FC7E08C2F0E947D0907E0D2
+:1042A00010E0E82EF12CC701002E02C095958795ED
+:1042B0000A94E2F780FF09C0602F7C2F80E00E9403
+:1042C0008C0AD81302C081E006C00150110958F7CA
+:1042D000C15010F780E0DF91CF911F910F91FF90B7
+:1042E000EF900895CF93C82F8CE20E944421882339
+:1042F00021F08C2FCF910C94442180E0CF91089530
+:10430000CF930E94C822811102C00E94AE228AEA85
+:1043100096E00E94E507C5E6C15049F00E94AA0850
+:104320008FE39CE90197F1F700C00000F5CF83EA25
+:1043300096E00E94E50789E20E94722181110CC17A
+:104340008AE20E94722181110E94AE2285E00E94C1
+:10435000722181110E9422210E94D3228093C101E7
+:1043600087E00E9472218823A9F18BE10E947221CB
+:10437000882351F08091C10181FB222720F991E02F
+:10438000922790FB81F90EC08EE00E947221882353
+:1043900061F08091C10182FB222720F991E09227F0
+:1043A00090FB82F98093C10115C080E10E947221C7
+:1043B0009091C101882341F093FB222720F981E0ED
+:1043C000822780FB93F904C0892F809580FB90F9A8
+:1043D0009093C1018091C1010E94D7220E94E522E1
+:1043E0008093DF0180EE0E947221882341F080914A
+:1043F000DF01982F909590FB80F98093DF0189E38E
+:104400000E947221882359F08091DF0181FB2227CD
+:1044100020F991E0922790FB81F98093DF0182EEF1
+:104420000E947221882359F08091DF0182FB2227AC
+:1044300020F991E0922790FB82F98093DF0186EECC
+:104440000E947221882359F08091DF0183FB22278B
+:1044500020F991E0922790FB83F98093DF0183EEAE
+:104460000E947221882359F08091DF0184FB22276A
+:1044700020F991E0922790FB84F98093DF0185E396
+:104480000E947221882359F08091DF0185FB222749
+:1044900020F991E0922790FB85F98093DF0181E379
+:1044A0000E947221882359F08091DF0186FB222728
+:1044B00020F991E0922790FB86F98093DF0181E15A
+:1044C0000E947221882359F08091DF0187FB222707
+:1044D00020F991E0922790FB87F98093DF0180918A
+:1044E000DF010E94E92287E20E947221C82F8EE13B
+:1044F0000E9472218111C2608FE10E94722181119C
+:10450000C46080E20E9472218111C86081E20E9431
+:1045100072218111C06182E20E9472218111C06208
+:1045200083E20E9472218111C06484E20E947221A0
+:10453000882311F0C06802C0CC2329F08C2F0E9480
+:10454000E0226C2F03C00E94DC22682F70E080E024
+:1045500090E0CF910C948F1DCF9108956DEE7EEF7A
+:1045600080E090E00E94272C60E082E090E00E94D2
+:10457000152C60E083E090E00E94152C60E084E060
+:1045800090E00E94152C60E085E090E00C94152CE2
+:1045900080E090E00E940F2C21E08D3E9E4F09F0BC
+:1045A00020E0822F089582E090E00C94072C682F81
+:1045B00082E090E00C94152C83E090E00C94072CA2
+:1045C000682F83E090E00C94152C84E090E00C942C
+:1045D000072C682F84E090E00C94152C8091C90181
+:1045E00080FF0BC06091100185E0689FB00111242D
+:1045F00075956795759567952BC081FF09C060918A
+:10460000100185E0689FB00111247595679520C061
+:1046100082FF07C06091100185E0689FB0011124FE
+:1046200017C09091CA019923D1F060910F0196179C
+:1046300088F72091100185E0289F90011124929F16
+:10464000A001939F500D112470E0CA010E94D92B44
+:104650006038710540F46115710539F002C065E0FC
+:1046600070E0862F08958FE7089581E00895809186
+:10467000C90180FF08C060910E0170E075956795D3
+:104680007595679521C081FF06C060910E0170E0AD
+:104690007595679519C082FF04C060910E0170E0A6
+:1046A00010C09091CA019923C1F060910D01961735
+:1046B000A0F780910E01899FC001112470E00E9433
+:1046C000D92B6038710528F46115710521F0862F0A
+:1046D00008958FE7089581E0089561E070E0F4CFD8
+:1046E000803F21F40E94EE22819504C0813F29F48D
+:1046F0000E94EE228093CD010895823F21F40E9412
+:10470000EE22819504C0833F29F40E94EE2280931B
+:10471000CC010895893F19F40E94372305C08A3FD0
+:1047200031F40E94372381958093CE0108958B3F09
+:1047300021F40E943723819504C08C3F29F40E9404
+:1047400037238093CF010895843F21F48091CB01DA
+:10475000816017C0853F21F48091CB01826011C038
+:10476000863F21F48091CB0184600BC0873F21F408
+:104770008091CB01886005C0883F31F48091CB01E6
+:1047800080618093CB0108958D3F21F48091C90110
+:1047900081600BC08E3F21F48091C901826005C009
+:1047A0008F3F29F48091C90184608093C9010895E5
+:1047B000803F39F48091CD0187FF6CC01092CD010C
+:1047C00069C0813F29F48091CD011816BCF362C005
+:1047D0009091CC01823F29F497FF5CC01092CC01EC
+:1047E00059C0833F19F41916CCF354C0893F41F4E2
+:1047F0008091CE0118160CF04DC01092CE014AC027
+:104800008A3F29F48091CE0187FF44C0F6CF8B3FC9
+:1048100039F48091CF0187FF3DC01092CF013AC09B
+:104820008C3F29F48091CF011816BCF333C0843F2C
+:1048300021F48091CB018E7F17C0853F21F48091B8
+:10484000CB018D7F11C0863F21F48091CB018B7FFE
+:104850000BC0873F21F48091CB01877F05C0883F43
+:1048600031F48091CB018F7E8093CB0113C08D3FBB
+:1048700021F48091C9018E7F0BC08E3F21F480917D
+:10488000C9018D7F05C08F3F29F48091C9018B7FBD
+:104890008093C9018091CC0181110EC08091CD011E
+:1048A00081110AC08091CE01811106C08091CF0193
+:1048B000811102C01092CA0108958091C10183FF45
+:1048C0007EC086EE96E00E94E5078091CB011F92A4
+:1048D0008F9381EE96E09F938F930E947E088FEDD9
+:1048E00096E00E94E5078091CC01282F332727FD11
+:1048F00030953F938F938CED96E09F938F930E941A
+:104900007E088AED96E00E94E5078091CD01282F70
+:10491000332727FD30953F938F9387ED96E09F9344
+:104920008F930E947E0885ED96E00E94E5078091B6
+:10493000CE01282F332727FD30953F938F9382EDAB
+:1049400096E09F938F930E947E0880ED96E00E94F0
+:10495000E5078091CF01282F332727FD30953F931E
+:104960008F938DEC96E09F938F930E947E088AEC44
+:1049700096E00E94E5078091CA011F928F9387EC11
+:1049800096E09F938F930E947E0885EC96E00E94AC
+:10499000E5078091C9011F928F9382EC96E09F9367
+:1049A0008F930E947E088FEB96E00E94E5078DB7FB
+:1049B0009EB74C960FB6F8949EBF0FBE8DBF8BEC82
+:1049C00091E00E9477150E948F209093C8018093F8
+:1049D000C70108951F93CF93DF938091C7019091F2
+:1049E000C8010E94A720AC019091CA01992321F02F
+:1049F0002091110130E006C0209112018AE0289F29
+:104A0000900111244217530708F486C08091CC010D
+:104A1000C091CD01D091CE011091CF01811107C07D
+:104A2000C11176C0D11174C0111172C075C09F3F01
+:104A300019F09F5F9093CA01181624F40E94EE2289
+:104A40008093CC018091CC0187FF05C00E94EE22AB
+:104A500081958093CC011C1624F40E94EE22809351
+:104A6000CD018091CD0187FF05C00E94EE22819586
+:104A70008093CD016091CC01662339F1C091CD01C5
+:104A8000CC2319F1772767FD7095872F972F0E9408
+:104A9000DE2A23E333E343E35FE30E94422B0E94D9
+:104AA000AB2A6093CC016C2F772767FD7095872F19
+:104AB000972F0E94DE2A23E333E343E35FE30E9460
+:104AC000422B0E94AB2A6093CD011D1624F40E9454
+:104AD00037238093CE018091CE0187FF05C00E94CD
+:104AE000372381958093CE01111624F40E94372339
+:104AF0008093CF018091CF0187FF05C00E943723AB
+:104B000081958093CF01DF91CF911F910C945D240B
+:104B10009F3F09F08ECF96CFDF91CF911F910895DF
+:104B2000EBECF1E085E0DF011D928A95E9F7109248
+:104B3000CA011092C901089589E099E00E94E50731
+:104B40001F9281E08F931F9285E08F938BEB98E00B
+:104B50009F938F930E947E080F900F900F900F905D
+:104B60000F900F9008958330E9F128F4813061F0BF
+:104B7000823009F10895853009F462C008F449C013
+:104B8000863009F474C0089580911201262F30E018
+:104B9000280F311D2F3F310524F4680F6093120157
+:104BA00003C08FEF80931201809112011F928F93A7
+:104BB00084EF97E072C080911101262F30E0280F1A
+:104BC000311D2F3F310524F4680F6093110103C09C
+:104BD0008FEF80931101809111011F928F9382EECC
+:104BE00097E05BC080911001262F30E0280F311D27
+:104BF0002F3F310524F4680F6093100103C08FEF3D
+:104C000080931001809110011F928F938FEC97E099
+:104C100044C080910F01262F30E0280F311D2F3F17
+:104C2000310524F4680F60930F0103C08FEF809368
+:104C30000F0180910F011F928F938AEB97E02DC097
+:104C400080910E01262F30E0280F311D2F3F3105B6
+:104C500024F4680F60930E0103C08FEF80930E0160
+:104C600080910E011F928F9381EA97E016C0809188
+:104C70000D01262F30E0280F311D2F3F310524F480
+:104C8000680F60930D0103C08FEF80930D01809139
+:104C90000D011F928F9386E897E09F938F930E9458
+:104CA0007E080F900F900F900F900895833081F140
+:104CB00028F4813059F08230D1F00895853009F41C
+:104CC00049C0B8F1863009F456C0089580911201A8
+:104CD000681720F4861B8093120102C01092120103
+:104CE000809112011F928F9387E797E054C08091C3
+:104CF0001101681720F4861B8093110102C01092E5
+:104D00001101809111011F928F9385E697E043C0B6
+:104D100080911001681720F4861B8093100102C057
+:104D200010921001809110011F928F9382E597E0FD
+:104D300032C080910F01681720F4861B80930F0109
+:104D400002C010920F0180910F011F928F938DE38B
+:104D500097E021C080910E01681720F4861B809394
+:104D60000E0102C010920E0180910E011F928F93CE
+:104D700084E297E010C080910D01681720F4861B33
+:104D800080930D0102C010920D0180910D011F92C0
+:104D90008F9389E097E09F938F930E947E080F90F6
+:104DA0000F900F900F900895CF93C82F1F928F935D
+:104DB0008EE09AE09F938F930E947E0881E090E0BE
+:104DC000A0E0B0E0BC01CD0104C0660F771F881FD2
+:104DD000991FCA95D2F70E948F1D0F900F900F90C8
+:104DE0000F90CF910C94CF19CF938732B0F58E31BD
+:104DF00008F04AC28E3009F4C4C100F5873009F4C6
+:104E00008DC1A8F4863009F045C28091C101817F2F
+:104E10008E7F8093C1018DE79BE00E94E50786E1CC
+:104E20009FE00E94E50781E08093D10175C1883041
+:104E300009F43FC08B3009F46BC12CC2863109F4F0
+:104E4000E6C120F4803109F4B0C124C2893109F4EB
+:104E5000C7C18B3109F481C11DC2883309F458C11F
+:104E600050F4893209F412C2853309F40FC2873233
+:104E700009F40CC20FC2833409F408C228F48A333F
+:104E800008F408C2895303C2883409F003C20E949F
+:104E9000CF198AEF9EE00E94E5079FEF23ED80E3A4
+:104EA000915020408040E1F700C000000E94222184
+:104EB00033C18AE19FE00E94E5078CE79EE00E94F3
+:104EC000E5070E94DC221F928F9389E79EE09F9363
+:104ED0008F930E947E0887E79EE00E94E5070E946C
+:104EE000D322C82F84E69EE00E94E5071F92CF934D
+:104EF0008FE59EE09F938F930E947E088DE59EE054
+:104F00000E94E50783E59EE00E94E5078C2F8170F3
+:104F10001F928F9380E59EE09F938F930E947E085F
+:104F20008EE49EE00E94E50784E49EE00E94E5078F
+:104F3000C1FB882780F91F928F9381E49EE09F93A5
+:104F40008F930E947E088FE39EE00E94E50783E333
+:104F50009EE00E94E507C2FB882780F91F928F938D
+:104F600080E39EE09F938F930E947E088EE29EE0F6
+:104F70000E94E50785E29EE00E94E507C3FBCC277F
+:104F8000C0F91F92CF9382E29EE09F938F930E947D
+:104F90007E0880E29EE00E94E5070E94E522C82F7D
+:104FA0008CE09EE00E94E5071F92CF9387E09EE091
+:104FB0009F938F930E947E0885E09EE00E94E50704
+:104FC0008CEE9DE00E94E5078C2F81701F928F93DD
+:104FD00089EE9DE09F938F930E947E088DB79EB7C8
+:104FE00080960FB6F8949EBF0FBE8DBF87EE9DE0F2
+:104FF0000E94E50780ED9DE00E94E507C1FB882740
+:1050000080F91F928F938DEC9DE09F938F930E9468
+:105010007E088BEC9DE00E94E50789EB9DE00E94F5
+:10502000E507C2FB882780F91F928F9386EB9DE0EE
+:105030009F938F930E947E0884EB9DE00E94E5077A
+:1050400082EA9DE00E94E507C3FB882780F91F9252
+:105050008F938FE99DE09F938F930E947E088DE947
+:105060009DE00E94E50783E99DE00E94E507C4FBFF
+:10507000882780F91F928F9380E99DE09F938F93FB
+:105080000E947E088EE89DE00E94E5078CE79DE087
+:105090000E94E507C5FB882780F91F928F9389E757
+:1050A0009DE09F938F930E947E0887E79DE00E947A
+:1050B000E5078BE59DE00E94E507C6FB882780F9A0
+:1050C0001F928F9388E59DE09F938F930E947E08A7
+:1050D00086E59DE00E94E5078EE49DE00E94E507DD
+:1050E000C7FBCC27C0F91F92CF938BE49DE09F9321
+:1050F0008F930E947E0889E49DE00E94E5078DB7AA
+:105100009EB74C960FB6F8949EBF0FBE8DBF04C0DD
+:1051100084EA9BE00E94E507C1E0C1C08091C10123
+:10512000C82FC095C170C0FB80F98093C101CC230A
+:1051300049F08EEE9EE00E94E5078091C1018660F5
+:10514000886048C081EE9EE00E94E5078091C10121
+:10515000897F877F8093C101DFCF9091C10191FB4F
+:10516000CC27C0F981E0C827892FC0FB81F9809343
+:10517000C101CC2319F084ED9EE027C086EC9EE0AF
+:10518000C9CF9091C10192FBCC27C0F981E0C8271B
+:10519000892FC0FB82F98093C101CC2319F087EBE2
+:1051A0009EE013C087EA9EE0B5CF9091C10193FBCA
+:1051B000CC27C0F981E0C827892FC0FB83F98093F1
+:1051C000C101CC2351F08BE99EE00E94E50780915C
+:1051D000C10181608093C10162C08EE89EE09ACFD8
+:1051E0008EE69BE00E94E50786E49BE00E94E507CF
+:1051F00080E19BE00E94E50783EE9AE00E94E507CC
+:1052000084EA9AE00E94E50789E79AE083CF8BE67B
+:105210009AE00E94E5070E9422151F928F9381E574
+:105220009AE09F938F930E947E0880910A011F92BB
+:105230008F938AE39AE09F938F930E947E088091D8
+:1052400064011F928F9387E29AE09F938F930E944D
+:105250007E088091C3019091C401A091C501B091D5
+:10526000C601BF93AF939F938F9383E19AE09F937F
+:105270008F930E947E088DB79EB742960FB6F89422
+:105280009EBF0FBE8DBF48CF8D5101C080E00E94F0
+:10529000D42642CF8CE89EE00E94E507C0E08C2F28
+:1052A000CF91089580E0089580E00895CF93C82FAE
+:1052B0008091D101813071F020F0823009F44BC02F
+:1052C00042C1E0910B01F0910C018081823209F022
+:1052D0003CC107C0E0910B01F0910C01808182324A
+:1052E00061F48C2F0E945229811104C08C2F0E94DE
+:1052F000F4262FC081E090E02CC08C2F0E9454290E
+:10530000811126C0C431E1F070F4CB3081F0C0319E
+:10531000D1F40E949C2586E09AE00E94E50782E095
+:105320008093D10115C0C93259F0C83361F48DE7BB
+:105330009BE00E94E5078AE09AE00E94E50708C02A
+:105340001092D10104C184E09AE00E94E507FFC0F9
+:1053500081E08170FEC0C43228F5CE3108F0C1C0B2
+:10536000CB30A1F1D0F4C73009F0D3C08EE18093E7
+:10537000120182E3809311018AE08093100184E19D
+:1053800080930F0188E080930E0188E280930D01E5
+:105390008AEA98E00E94E507BFC0C33149F1C431F1
+:1053A000C1F0B7C0CB3409F4A9C028F4C93289F0E0
+:1053B000C83361F0AEC0C13509F49EC0C23509F4EE
+:1053C00099C0CE3409F0A5C06AE09EC00E949C2519
+:1053D000A3C08091D001882319F01092D0019CC005
+:1053E00087EB98E00E94E50781E08093D101B1C08E
+:1053F00081E998E00E94E5078FE798E00E94E507C1
+:10540000809112011F928F938CE798E09F938F9366
+:105410000E947E088AE798E00E94E50788E698E007
+:105420000E94E507809111011F928F9385E698E015
+:105430009F938F930E947E0883E698E00E94E50781
+:1054400084E598E00E94E507809110011F928F93F8
+:1054500081E598E09F938F930E947E088FE498E007
+:105460000E94E5078EE398E00E94E50780910F0116
+:105470001F928F938BE398E09F938F930E947E08F7
+:1054800089E398E00E94E50784E298E00E94E5073E
+:1054900080910E011F928F9381E298E09F938F93EA
+:1054A0000E947E088FE198E00E94E50788E098E07E
+:1054B0000E94E50780910D011F928F9385E098E08F
+:1054C0009F938F930E947E0883E098E00E94E507F7
+:1054D0008DB79EB748960FB6F8949EBF0FBE8DBF8E
+:1054E0001BC0CE51EC2FF0E0E95DFE4F8081809330
+:1054F000D00112C061E003C061E006C06AE08091A3
+:10550000D0010E94B32508C08091D0010E94562688
+:1055100003C088EA98E013C08091D001882369F025
+:105520001F928F9382EA98E09F938F930E947E0848
+:105530000F900F900F900F9004C08FE998E00E9499
+:10554000E50781E006C01092D10180E002C080E052
+:1055500000CFCF91089504D06894B1118DC0089503
+:1055600070D088F09F5790F0B92F9927B751A0F0CD
+:10557000D1F0660F771F881F991F1AF0BA95C9F7E7
+:1055800012C0B13081F077D0B1E0089574C0672FB8
+:10559000782F8827B85F39F0B93FCCF38695779597
+:1055A0006795B395D9F73EF4909580957095619580
+:1055B0007F4F8F4F9F4F0895E89409C097FB3EF4AB
+:1055C00090958095709561957F4F8F4F9F4F992350
+:1055D000A9F0F92F96E9BB279395F69587957795CE
+:1055E0006795B795F111F8CFFAF4BB0F11F460FF8E
+:1055F0001BC06F5F7F4F8F4F9F4F16C0882311F0E6
+:1056000096E911C0772321F09EE8872F762F05C0F9
+:10561000662371F096E8862F70E060E02AF09A9594
+:10562000660F771F881FDAF7880F9695879597F989
+:10563000089557FD9058440F551F59F05F3F71F082
+:105640004795880F97FB991F61F09F3F79F08795E9
+:105650000895121613061406551FF2CF4695F1DF72
+:1056600008C0161617061806991FF1CF8695710502
+:10567000610508940895E894BB2766277727CB0136
+:1056800097F908950BD078C069D028F06ED018F043
+:10569000952309F05AC05FC01124EECFCADFA0F3F2
+:1056A000959FD1F3950F50E0551F629FF001729FB7
+:1056B000BB27F00DB11D639FAA27F00DB11DAA1FD6
+:1056C000649F6627B00DA11D661F829F2227B00D23
+:1056D000A11D621F739FB00DA11D621F839FA00DAE
+:1056E000611D221F749F3327A00D611D231F849FFE
+:1056F000600D211D822F762F6A2F11249F57504055
+:105700008AF0E1F088234AF0EE0FFF1FBB1F661FEF
+:10571000771F881F91505040A9F79E3F510570F0A8
+:1057200014C0AACF5F3FECF3983EDCF386957795E3
+:105730006795B795F795E7959F5FC1F7FE2B880FA3
+:10574000911D9695879597F9089597F99F6780E839
+:1057500070E060E008959FEF80EC089500240A94C3
+:105760001616170618060906089500240A9412163C
+:105770001306140605060895092E0394000C11F46F
+:10578000882352F0BB0F40F4BF2B11F460FF04C01C
+:105790006F5F7F4F8F4F9F4F0895991B79E004C033
+:1057A000991F961708F0961B881F7A95C9F7809560
+:1057B000089597FB072E16F4009407D077FD09D0C3
+:1057C0000E94F32B07FC05D03EF4909581959F4FE6
+:1057D0000895709561957F4F0895EE0FFF1F059016
+:1057E000F491E02D0994AA1BBB1B51E107C0AA1F2D
+:1057F000BB1FA617B70710F0A61BB70B881F991F72
+:105800005A95A9F780959095BC01CD010895F99915
+:10581000FECF92BD81BDF89A992780B50895A8E181
+:10582000B0E042E050E00C942F2C262FF999FECFE7
+:1058300092BD81BDF89A019700B4021639F01FBAE3
+:1058400020BD0FB6F894FA9AF99A0FBE0895019602
+:10585000272F0E94162C0C94152CDC01CB01FC0187
+:10586000F999FECF06C0F2BDE1BDF89A319600B4B9
+:0E5870000D9241505040B8F70895F894FFCFC4
+:10587E00880D790E560E220EEE0D01B60128081473
+:10588E000A321E3F4D36203106E405AE058E051A4E
+:10589E000533054C056505010203040506070809D5
+:0258AE000000F8
+:00000001FF
diff --git a/keyboards/hhkb/keymaps/lxol/keymap.c b/keyboards/hhkb/keymaps/lxol/keymap.c
new file mode 100644
index 000000000..ccf1e0704
--- /dev/null
+++ b/keyboards/hhkb/keymaps/lxol/keymap.c
@@ -0,0 +1,208 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * lxol HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define WIN 1
+#define HHKB 2
+#define RGUILEV 3
+#define LGUILEV 4
+#define RALTLEV 5
+#define LALTLEV 6
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 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 | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [BASE] = KEYMAP( // layer 0 : default
+
+
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, LT(LALTLEV,KC_A), LT(LGUILEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV,KC_L), LT(RALTLEV,KC_SCLN), KC_QUOT, KC_FN0, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+
+
+ /* Layer 1: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |---+---+---+---+---|
+ | | | | | |
+ |---+---+---+---+---|
+ */
+
+ [HHKB] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+
+ /* Layer LGUI: All keys with RGUI modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [RGUILEV] = KEYMAP( // Right GUI layer by KC_L
+
+ RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), \
+ RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), \
+ RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, \
+ RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, \
+ KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
+
+ /* Layer LGUI: All keys with LGUI modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | LGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [LGUILEV] = KEYMAP( // Right GUI layer by KC_L
+
+ LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), \
+ LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), \
+ LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, \
+ KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, \
+ KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
+
+ /* Layer LALT: All keys with RALT modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [RALTLEV] = KEYMAP( // Right ALT layer by KC_L
+
+ RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), \
+ RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), \
+ RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, \
+ RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, \
+ KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
+
+ /* Layer LALT: All keys with LALT modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | LGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [LALTLEV] = KEYMAP( // Right ALT layer by KC_L
+
+ LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), \
+ LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), \
+ LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, \
+ KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, \
+ KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
+
+
+ /* Layer WIN: Win layer
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LGui | LAlt | Space | RGui | Ralt |
+ |------+------+-------+------+------|
+ */
+
+ [WIN] = KEYMAP( // BASE level with swapped GUI/ALT
+
+
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, LT(LGUILEV,KC_A), LT(LALTLEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV,KC_L), LT(RGUILEV,KC_SCLN), KC_QUOT, KC_FN0, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
+ KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter*
+};
+
+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;
+};
diff --git a/keyboards/hhkb/matrix.c b/keyboards/hhkb/matrix.c
new file mode 100644
index 000000000..2dfb2f5e1
--- /dev/null
+++ b/keyboards/hhkb/matrix.c
@@ -0,0 +1,204 @@
+/*
+Copyright 2011 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 <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "timer.h"
+#include "matrix.h"
+#include "hhkb_avr.h"
+#include <avr/wdt.h>
+#include "suspend.h"
+#include "lufa.h"
+
+
+// matrix power saving
+#define MATRIX_POWER_SAVE 10000
+static uint32_t matrix_last_modified = 0;
+
+// matrix state buffer(1:on, 0:off)
+static matrix_row_t *matrix;
+static matrix_row_t *matrix_prev;
+static matrix_row_t _matrix0[MATRIX_ROWS];
+static matrix_row_t _matrix1[MATRIX_ROWS];
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+#ifdef DEBUG
+ debug_enable = true;
+ debug_keyboard = true;
+#endif
+
+ KEY_INIT();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
+ matrix = _matrix0;
+ matrix_prev = _matrix1;
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t *tmp;
+
+ tmp = matrix_prev;
+ matrix_prev = matrix;
+ matrix = tmp;
+
+ // power on
+ if (!KEY_POWER_STATE()) KEY_POWER_ON();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ KEY_SELECT(row, col);
+ _delay_us(5);
+
+ // Not sure this is needed. This just emulates HHKB controller's behaviour.
+ if (matrix_prev[row] & (1<<col)) {
+ KEY_PREV_ON();
+ }
+ _delay_us(10);
+
+ // NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE.
+ // If V-USB interrupts in this section we could lose 40us or so
+ // and would read invalid value from KEY_STATE.
+ uint8_t last = TIMER_RAW;
+
+ KEY_ENABLE();
+
+ // Wait for KEY_STATE outputs its value.
+ // 1us was ok on one HHKB, but not worked on another.
+ // no wait doesn't work on Teensy++ with pro(1us works)
+ // no wait does work on tmk PCB(8MHz) with pro2
+ // 1us wait does work on both of above
+ // 1us wait doesn't work on tmk(16MHz)
+ // 5us wait does work on tmk(16MHz)
+ // 5us wait does work on tmk(16MHz/2)
+ // 5us wait does work on tmk(8MHz)
+ // 10us wait does work on Teensy++ with pro
+ // 10us wait does work on 328p+iwrap with pro
+ // 10us wait doesn't work on tmk PCB(8MHz) with pro2(very lagged scan)
+ _delay_us(5);
+
+ if (KEY_STATE()) {
+ matrix[row] &= ~(1<<col);
+ } else {
+ matrix[row] |= (1<<col);
+ }
+
+ // Ignore if this code region execution time elapses more than 20us.
+ // MEMO: 20[us] * (TIMER_RAW_FREQ / 1000000)[count per us]
+ // MEMO: then change above using this rule: a/(b/c) = a*1/(b/c) = a*(c/b)
+ if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) {
+ matrix[row] = matrix_prev[row];
+ }
+
+ _delay_us(5);
+ KEY_PREV_OFF();
+ KEY_UNABLE();
+
+ // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
+ // This takes 25us or more to make sure KEY_STATE returns to idle state.
+#ifdef HHKB_JP
+ // Looks like JP needs faster scan due to its twice larger matrix
+ // or it can drop keys in fast key typing
+ _delay_us(30);
+#else
+ _delay_us(75);
+#endif
+ }
+ if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
+ }
+ // power off
+ if (KEY_POWER_STATE() &&
+ (USB_DeviceState == DEVICE_STATE_Suspended ||
+ USB_DeviceState == DEVICE_STATE_Unattached ) &&
+ timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
+ KEY_POWER_OFF();
+ suspend_power_down();
+ }
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ if (matrix[i] != matrix_prev[i])
+ return true;
+ }
+ return false;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < matrix_rows(); row++) {
+ xprintf("%02X: %08b\n", row, bitrev(matrix_get_row(row)));
+ }
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) {
+ count += bitpop16(matrix_get_row(r));
+ }
+ return count;
+}
+
+void matrix_power_up(void) {
+ KEY_POWER_ON();
+}
+void matrix_power_down(void) {
+ KEY_POWER_OFF();
+}