summaryrefslogtreecommitdiff
path: root/keyboard/planck
diff options
context:
space:
mode:
authorNicholas Keene <git@nicholaskeene.com>2016-05-02 21:35:58 -0500
committerNicholas Keene <git@nicholaskeene.com>2016-05-02 21:35:58 -0500
commit8b0274f60a47eae523e28b5a7c6c7f581b6d605a (patch)
treeb8c6194d89712ddaf5e22aef85274c12c53cb2f1 /keyboard/planck
parent1076c2b1226ed049a364971bf8e1edcd9ed45f6d (diff)
parent2c070163ffffffde546fb00acaa2fbb96b93da64 (diff)
Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
Diffstat (limited to 'keyboard/planck')
-rw-r--r--keyboard/planck/Makefile67
-rw-r--r--keyboard/planck/README.md4
-rw-r--r--keyboard/planck/backlight.c61
-rw-r--r--keyboard/planck/config.h4
-rw-r--r--keyboard/planck/keymaps/bone2planck.c112
-rw-r--r--keyboard/planck/keymaps/default/README.md32
-rw-r--r--keyboard/planck/keymaps/default/keymap.c315
-rw-r--r--keyboard/planck/keymaps/default/makefile.mk2
-rw-r--r--keyboard/planck/keymaps/nico.c69
-rw-r--r--keyboard/planck/keymaps/pvc/config.h88
-rw-r--r--keyboard/planck/keymaps/pvc/keymap.c536
-rw-r--r--keyboard/planck/keymaps/pvc/makefile.mk16
-rw-r--r--keyboard/planck/keymaps/tak3over.c130
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c (renamed from keyboard/planck/common_keymaps/keymap_mitch.c)0
-rw-r--r--keyboard/planck/planck.c93
-rw-r--r--keyboard/planck/planck.h2
-rw-r--r--keyboard/planck/planck_pcb_r3.hex (renamed from keyboard/planck/planck_pcb.hex)0
-rwxr-xr-xkeyboard/planck/planck_pcb_r3_w_bootloader.hex (renamed from keyboard/planck/planck_with_bootloader.hex)0
-rw-r--r--keyboard/planck/planck_pcb_r4.hex1645
-rw-r--r--keyboard/planck/planck_pcb_r4_w_bootloader.hex1897
20 files changed, 4904 insertions, 169 deletions
diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile
index 307b0c7f4f..c0c6201cba 100644
--- a/keyboard/planck/Makefile
+++ b/keyboard/planck/Makefile
@@ -41,7 +41,6 @@
# Target file name (without extension).
TARGET = planck
-
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
@@ -62,17 +61,28 @@ ifneq ("$(wildcard keymaps/$(KEYMAP).c)","")
else
ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","")
KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c
+ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
+ include keymaps/$(KEYMAP)/makefile.mk
+endif
else
$(error Keymap file does not exist)
+endif
endif
-endif
+
else
+
ifneq ("$(wildcard keymaps/default.c)","")
KEYMAP_FILE = keymaps/default.c
else
KEYMAP_FILE = keymaps/default/keymap.c
endif
+
+ifneq ("$(wildcard keymaps/default/makefile.mk)","")
+ include keymaps/default/makefile.mk
endif
+
+endif
+
SRC := $(KEYMAP_FILE) $(SRC)
CONFIG_H = config.h
@@ -94,7 +104,6 @@ MCU = atmega32u4
# software delays.
F_CPU = 16000000
-
#
# LUFA specific
#
@@ -126,29 +135,41 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+# change to "no" to disable the options, or define them in the makefile.mk in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # 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 = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
# 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
-# AUDIO_ENABLE = YES # Audio output on port C6
-# UNICODE_ENABLE = YES # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.
-
-ifdef BACKLIGHT_ENABLE
- SRC += backlight.c
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifdef KEYMAP
+
+ifeq ("$(wildcard keymaps/$(KEYMAP).c)","")
+ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
+ include keymaps/$(KEYMAP)/makefile.mk
+endif
endif
+else
+
+ifneq ("$(wildcard keymaps/default/makefile.mk)","")
+ include keymaps/default/makefile.mk
+endif
+
+endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
@@ -158,4 +179,4 @@ VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
-include $(TOP_DIR)/quantum/quantum.mk
+include $(TOP_DIR)/quantum/quantum.mk \ No newline at end of file
diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md
index 3ba0cc1527..d9a1e3beee 100644
--- a/keyboard/planck/README.md
+++ b/keyboard/planck/README.md
@@ -16,13 +16,13 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
-Keymaps follow the format **__<name\>.c__** and are stored in the `keymaps` folder.
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
### Notable forks (which some of the keymap files are from)
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
diff --git a/keyboard/planck/backlight.c b/keyboard/planck/backlight.c
deleted file mode 100644
index f69364b2af..0000000000
--- a/keyboard/planck/backlight.c
+++ /dev/null
@@ -1,61 +0,0 @@
-
-#include <avr/io.h>
-#include "backlight.h"
-
-#define CHANNEL OCR1C
-
-void backlight_init_ports()
-{
-
- // Setup PB7 as output and output low.
- DDRB |= (1<<7);
- PORTB &= ~(1<<7);
-
- // Use full 16-bit resolution.
- ICR1 = 0xFFFF;
-
- // I could write a wall of text here to explain... but TL;DW
- // Go read the ATmega32u4 datasheet.
- // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
-
- // Pin PB7 = OCR1C (Timer 1, Channel C)
- // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
- // (i.e. start high, go low when counter matches.)
- // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
- // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
-
- TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
- TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
-
- backlight_init();
-}
-
-void backlight_set(uint8_t level)
-{
- if ( level == 0 )
- {
- // Turn off PWM control on PB7, revert to output low.
- TCCR1A &= ~(_BV(COM1C1));
- CHANNEL = 0x0;
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
- }
- else if ( level == BACKLIGHT_LEVELS )
- {
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
- // Turn on PWM control of PB7
- TCCR1A |= _BV(COM1C1);
- // Set the brightness
- CHANNEL = 0xFFFF;
- }
- else
- {
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
- // Turn on PWM control of PB7
- TCCR1A |= _BV(COM1C1);
- // Set the brightness
- CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
- }
-} \ No newline at end of file
diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h
index d3719e0cb1..7d64f09773 100644
--- a/keyboard/planck/config.h
+++ b/keyboard/planck/config.h
@@ -73,10 +73,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-#define NO_DEBUG
+//#define NO_DEBUG
/* disable print */
-#define NO_PRINT
+//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
diff --git a/keyboard/planck/keymaps/bone2planck.c b/keyboard/planck/keymaps/bone2planck.c
new file mode 100644
index 0000000000..a99e7719f9
--- /dev/null
+++ b/keyboard/planck/keymaps/bone2planck.c
@@ -0,0 +1,112 @@
+
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+#include "backlight.h"
+#endif
+#include "..\..\quantum\keymap_extras\keymap_german.h"
+
+/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
+ It has Umlauts and "ß" as it is optimized for a mix of German & English.
+ My favourite features are the placement of the special characters often used for programming right on the home row
+ and the number & navigation block combo, so you never have to move your hands from their home position.
+
+ Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Bone2
+ * ,-----------------------------------------------------------------------------------.
+ * | Q | J | D | U | A | X | P | H | L | M | W | ẞ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | M1 | C | T | I | E | O | B | N | R | S | G | M1 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [0] = {
+ { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS },
+ { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) },
+ { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S },
+ { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT }
+ },
+
+ /* M1 Special Characters
+ * ,-----------------------------------------------------------------------------------.
+ * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | # | $ | | | ~ | € | + | % | " | ' | ; | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [1] = {
+ { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO },
+ { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS },
+ { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+ },
+
+ /* Navigation & Number Blocks
+ * ,-----------------------------------------------------------------------------------.
+ * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [2] = {
+ { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO },
+ { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO },
+ { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+ },
+
+ /* Function & Media Keys
+ * ,-----------------------------------------------------------------------------------.
+ * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [3] = {
+ { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO },
+ { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO },
+ { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS},
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, 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);
+#ifdef BACKLIGHT_ENABLE
+ backlight_step();
+#endif
+ }
+ else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/default/README.md b/keyboard/planck/keymaps/default/README.md
index d2f43bbdb8..de9680b498 100644
--- a/keyboard/planck/keymaps/default/README.md
+++ b/keyboard/planck/keymaps/default/README.md
@@ -1,34 +1,2 @@
# The Default Planck Layout
- const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = { /* Qwerty */
- {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_CM] = { /* Colemak */
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
- {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_DV] = { /* Dvorak */
- {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
- {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
- {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_RS] = { /* RAISE */
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
- },
- [_LW] = { /* LOWER */
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
- }
- }; \ No newline at end of file
diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c
index d995eb9e58..ac4937b69e 100644
--- a/keyboard/planck/keymaps/default/keymap.c
+++ b/keyboard/planck/keymaps/default/keymap.c
@@ -2,19 +2,46 @@
// this is the style you want to emulate.
#include "planck.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
-#define _QW 0
-#define _CM 1
-#define _DV 2
-#define _LW 3
-#define _RS 4
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MUSIC 5
+#define _PLOVER 6
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define AUD_OFF M(6)
+#define AUD_ON M(7)
+#define MUS_OFF M(8)
+#define MUS_ON M(9)
+#define VC_IN M(10)
+#define VC_DE M(11)
+#define PLOVER M(12)
+#define EXT_PLV M(13)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -26,14 +53,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QW] = {
+[_QWERTY] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Colemak
@@ -44,14 +71,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_CM] = {
+[_COLEMAK] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Dvorak
@@ -62,14 +89,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_DV] = {
+[_DVORAK] = {
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Raise
@@ -78,46 +123,143 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RS] = {
+[_RAISE] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
-/* Lower
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Plover layer (http://opensteno.org)
* ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * | | S | T | P | H | * | * | F | P | L | T | D |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
+ * | Exit | | | A | O | | E | U | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_LW] = {
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
+
+
};
const uint16_t PROGMEM fn_actions[] = {
};
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+ {440.0*pow(2.0,(31)/12.0), 12},
+ {440.0*pow(2.0,(28)/12.0), 8},
+ {440.0*pow(2.0,(19)/12.0), 8},
+ {440.0*pow(2.0,(24)/12.0), 8},
+ {440.0*pow(2.0,(28)/12.0), 20}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
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:
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
@@ -127,6 +269,111 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
+ case 6:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_off();
+ #endif
+ }
+ break;
+ case 7:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_on();
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+ }
+ break;
+ case 8:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ layer_off(_MUSIC);
+ stop_all_notes();
+ #endif
+ }
+ break;
+ case 9:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ layer_on(_MUSIC);
+ #endif
+ }
+ break;
+ case 10:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_iterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
+ case 11:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_deiterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
+ case 12:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_off(_MUSIC);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ break;
+ case 13:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ break;
+
}
return MACRO_NONE;
};
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // stops the tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+
+uint8_t starting_note = 0x0C;
+int offset = 0;
+
+void process_action_user(keyrecord_t *record) {
+
+ if (IS_LAYER_ON(_MUSIC)) {
+ if (record->event.pressed) {
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ } else {
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ }
+ }
+
+}
+#endif
diff --git a/keyboard/planck/keymaps/default/makefile.mk b/keyboard/planck/keymaps/default/makefile.mk
new file mode 100644
index 0000000000..99fbfbd0bb
--- /dev/null
+++ b/keyboard/planck/keymaps/default/makefile.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes
+NKRO_ENABLE = yes \ No newline at end of file
diff --git a/keyboard/planck/keymaps/nico.c b/keyboard/planck/keymaps/nico.c
new file mode 100644
index 0000000000..e81fd80a44
--- /dev/null
+++ b/keyboard/planck/keymaps/nico.c
@@ -0,0 +1,69 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "backlight.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _CM 1
+#define _DV 2
+#define _LW 3
+#define _RS 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_CM] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_DV] = { /* Dvorak */
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
+ {M(0), KC_ESC, KC_LALT, KC_LGUI, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_RS] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
+ {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_LW] = { /* LOWER */
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
+ {M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F14, KC_F15, KC_TRNS, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_KEY(MO(_LW), KC_BSPC), // Tap for backspace, hold for LOWER
+ [2] = ACTION_LAYER_TAP_KEY(MO(_RS), KC_ENT), // Tap for enter, hold for RAISE
+};
+
+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);
+ backlight_step();
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/pvc/config.h b/keyboard/planck/keymaps/pvc/config.h
new file mode 100644
index 0000000000..7d64f09773
--- /dev/null
+++ b/keyboard/planck/keymaps/pvc/config.h
@@ -0,0 +1,88 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Planck Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define ROWS (int []){ D0, D5, B5, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* 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)) \
+)
+
+/* ws2812 RGB LED */
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+#define ws2812_pin PD1
+#define RGBLED_NUM 28 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c
new file mode 100644
index 0000000000..27850b2154
--- /dev/null
+++ b/keyboard/planck/keymaps/pvc/keymap.c
@@ -0,0 +1,536 @@
+#include "planck.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "led.h"
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+ #include "song_list.h"
+#endif
+
+#define LAYER_QWERTY 0
+#define LAYER_COLEMAK 1
+#define LAYER_DVORAK 2
+#define LAYER_LOWER 3
+#define LAYER_RAISE 4
+#define LAYER_FUNCTION 5
+#define LAYER_MOUSE 6
+#define LAYER_MUSIC 7
+#define LAYER_ADJUST 8
+
+#define MACRO_QWERTY 0
+#define MACRO_COLEMAK 1
+#define MACRO_DVORAK 2
+#define MACRO_LOWER 3
+#define MACRO_RAISE 4
+#define MACRO_FUNCTION 5
+#define MACRO_MOUSE 6
+#define MACRO_TIMBRE_1 7
+#define MACRO_TIMBRE_2 8
+#define MACRO_TIMBRE_3 9
+#define MACRO_TIMBRE_4 10
+#define MACRO_TEMPO_U 11
+#define MACRO_TEMPO_D 12
+#define MACRO_TONE_DEFAULT 13
+#define MACRO_MUSIC_ON 14
+#define MACRO_MUSIC_OFF 15
+#define MACRO_AUDIO_ON 16
+#define MACRO_AUDIO_OFF 17
+#define MACRO_INC_VOICE 18
+#define MACRO_DEC_VOICE 19
+
+#define M_QWRTY M(MACRO_QWERTY)
+#define M_COLMK M(MACRO_COLEMAK)
+#define M_DVORK M(MACRO_DVORAK)
+#define M_LOWER M(MACRO_LOWER)
+#define M_RAISE M(MACRO_RAISE)
+#define M_FUNCT M(MACRO_FUNCTION)
+#define M_MOUSE M(MACRO_MOUSE)
+#define TIMBR_1 M(MACRO_TIMBRE_1)
+#define TIMBR_2 M(MACRO_TIMBRE_2)
+#define TIMBR_3 M(MACRO_TIMBRE_3)
+#define TIMBR_4 M(MACRO_TIMBRE_4)
+#define TMPO_UP M(MACRO_TEMPO_U)
+#define TMPO_DN M(MACRO_TEMPO_D)
+#define TMPO_DF M(MACRO_TONE_DEFAULT)
+
+
+#define MUS_ON M(MACRO_MUSIC_ON)
+#define MUS_OFF M(MACRO_MUSIC_OFF)
+#define AUD_OFF M(MACRO_AUDIO_OFF)
+#define AUD_ON M(MACRO_AUDIO_ON)
+#define VC_UP M(MACRO_INC_VOICE)
+#define VC_DOWN M(MACRO_DEC_VOICE)
+
+
+#define SC_UNDO LCTL(KC_Z)
+#define SC_REDO LCTL(KC_Y)
+#define SC_CUT LCTL(KC_X)
+#define SC_COPY LCTL(KC_C)
+#define SC_PSTE LCTL(KC_V)
+#define SC_SELA LCTL(KC_A)
+#define SC_SAVE LCTL(KC_S)
+#define SC_OPEN LCTL(KC_O)
+#define SC_ACLS LALT(KC_F4)
+#define SC_CCLS LCTL(KC_F4)
+
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define ________________ _______, _______
+#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_QWERTY] = { /* QWERTY */
+ { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
+ { KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
+ { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
+ },
+
+/* COLEMAK
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | TAB | Q | W | F | P | G | J | L | U | Y | ; | ESC |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_COLEMAK] = { /* COLEMAK */
+ { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC },
+ { KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT },
+ { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
+ },
+
+/* DVORAK
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC | A | O | E | U | I | D | H | T | N | S | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_DVORAK] = { /* DVORAK */
+ { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
+ { KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH },
+ { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
+ },
+
+/* Raise
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | [ | ] | \ |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_RAISE] = { /* RAISED */
+ { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
+ { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS },
+ { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END },
+ },
+
+
+/* LOWERED
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | INS |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_LOWER] = { /* LOWERED */
+ { KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS },
+ { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS },
+ { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END },
+ },
+
+/* FUNCTION
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | CAP LK | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | PRINT |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LWIN | FN | LALT | RAISE | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+ [LAYER_FUNCTION] = { /* FUNCTION */
+ { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS },
+ { KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR },
+ { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE },
+ { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT },
+ },
+
+#ifdef MOUSEKEY_ENABLE
+
+ [LAYER_MOUSE] = { /* MOUSE */
+ { KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D },
+ { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R },
+ },
+
+#endif
+
+ [LAYER_MUSIC] = { /* MUSIC */
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ },
+
+ [LAYER_ADJUST] = { /* ADJUST */
+ { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF },
+ { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ },
+ },
+
+
+/*
+ [LAYER_EMPTY] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
+ { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, },
+ },
+*/
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_my_startup[][2] = SONG(ODE_TO_JOY);
+float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+
+float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
+float tone_music_on[][2] = SONG(DOE_A_DEER);
+float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
+float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+#endif /* AUDIO_ENABLE */
+
+void persistant_default_layer_set(uint16_t default_layer)
+{
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+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 MACRO_QWERTY:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_QWERTY);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
+ }
+ break;
+
+ case MACRO_COLEMAK:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_COLEMAK);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
+ }
+ break;
+
+ case MACRO_DVORAK:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_DVORAK);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
+ }
+ break;
+
+ case MACRO_LOWER:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_LOWER);
+ update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ }
+ else
+ {
+ layer_off(LAYER_LOWER);
+ update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ }
+ break;
+
+ case MACRO_RAISE:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_RAISE);
+ update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ }
+ else
+ {
+ layer_off(LAYER_RAISE);
+ update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ }
+ break;
+
+ case MACRO_FUNCTION:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_FUNCTION);
+ }
+ else
+ {
+ layer_off(LAYER_FUNCTION);
+ }
+ break;
+
+#ifdef MOUSEKEY_ENABLE
+
+ case MACRO_MOUSE:
+ if (record->event.pressed)
+ {
+ layer_invert(LAYER_MOUSE);
+ }
+ break;
+
+#endif /* MOUSEKEY_ENABLE */
+
+#ifdef AUDIO_ENABLE
+
+ case MACRO_TIMBRE_1:
+ if (record->event.pressed) set_timbre(TIMBRE_12);
+ break;
+
+ case MACRO_TIMBRE_2:
+ if (record->event.pressed) set_timbre(TIMBRE_25);
+ break;
+
+ case MACRO_TIMBRE_3:
+ if (record->event.pressed) set_timbre(TIMBRE_50);
+ break;
+
+ case MACRO_TIMBRE_4:
+ if (record->event.pressed) set_timbre(TIMBRE_75);
+ break;
+
+ case MACRO_TEMPO_U:
+ if (record->event.pressed) increase_tempo(10);
+ break;
+
+ case MACRO_TEMPO_D:
+ if (record->event.pressed) decrease_tempo(10);
+ break;
+
+ case MACRO_TONE_DEFAULT:
+ if (record->event.pressed)
+ {
+ set_timbre(TIMBRE_DEFAULT);
+ set_tempo(TEMPO_DEFAULT);
+ }
+ break;
+
+ case MACRO_AUDIO_OFF:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ audio_off();
+ #endif
+ }
+ break;
+
+ case MACRO_AUDIO_ON:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ audio_on();
+ PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+ #endif
+ }
+ break;
+
+ case MACRO_MUSIC_ON:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+ layer_on(LAYER_MUSIC);
+ #endif
+ }
+ break;
+
+ case MACRO_MUSIC_OFF:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ layer_off(LAYER_MUSIC);
+ stop_all_notes();
+ #endif
+ }
+ break;
+
+ case MACRO_INC_VOICE:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ voice_iterate();
+ PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+ #endif
+ }
+ break;
+
+ case MACRO_DEC_VOICE:
+ if (record->event.pressed)
+ {
+ #ifdef AUDIO_ENABLE
+ voice_deiterate();
+ PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+ #endif
+ }
+ break;
+
+#endif /* AUDIO_ENABLE */
+
+ default:
+ break;
+
+ }
+ return MACRO_NONE;
+};
+
+
+#ifdef AUDIO_ENABLE
+
+
+void process_action_user(keyrecord_t *record)
+{
+
+ uint8_t starting_note = 0x0C;
+ int offset = 7;
+
+ if (IS_LAYER_ON(LAYER_MUSIC))
+ {
+ if (record->event.pressed)
+ {
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ }
+ else
+ {
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ }
+ }
+}
+
+
+void matrix_init_user(void)
+{
+ set_voice(default_voice);
+ play_startup_tone();
+ println("Matrix Init");
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ static uint8_t old_usb_led = 0;
+
+ _delay_ms(10); // gets rid of tick
+
+ if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning off...
+ PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LED is turning off...
+ PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LED is turning off...
+ PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+ }
+ old_usb_led = usb_led;
+}
+
+
+void play_startup_tone()
+{
+ _delay_ms(10); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
+}
+
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
+ _delay_ms(1000);
+}
+
+#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/keyboard/planck/keymaps/pvc/makefile.mk b/keyboard/planck/keymaps/pvc/makefile.mk
new file mode 100644
index 0000000000..4b9e34c53f
--- /dev/null
+++ b/keyboard/planck/keymaps/pvc/makefile.mk
@@ -0,0 +1,16 @@
+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
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CONFIG_H = keymaps/$(KEYMAP)/config.h
diff --git a/keyboard/planck/keymaps/tak3over.c b/keyboard/planck/keymaps/tak3over.c
new file mode 100644
index 0000000000..7d8243dfac
--- /dev/null
+++ b/keyboard/planck/keymaps/tak3over.c
@@ -0,0 +1,130 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+//Dropped the Dvorak layer and added two my layer buttons. Both Raise and lower can be accessed from either side now.
+
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _CM 1
+#define _LW 2
+#define _RS 3
+#define _FN 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QW] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right
+ * `-----------------------------------------------------------------------------------'
+ */
+[_CM] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {KC_LCTL, KC_LALT, KC_LGUI, MO(_FN), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| F7 | F8 | F9 | F10 | F11 | F12 | _ | + | { | } |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RS] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE},
+ {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | Reset| Ins | Home | PGUP |Colemk| Left | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Brite| Del | End | PGDN |Qwerty| Del | _ | + | { | } |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LW] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_TRNS, RESET, KC_INS, KC_HOME, KC_PGUP, DF(_CM), KC_LEFT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, M(0), KC_DEL, KC_END, KC_PGDN, DF(_QW), KC_DEL, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+/* Function
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | GUI | X | C | V | Z | Left | Down | Up |Right | Del | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |Shift | Ctrl | X | C | V | Z | Next | Mute | Vol- | Vol+ | Play |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Func |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FN] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, KC_RGUI, KC_X, KC_C, KC_V, KC_Z, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, KC_BSLS},
+ {KC_TRNS, KC_RCTL, KC_X, KC_C, KC_V, KC_Z, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/common_keymaps/keymap_mitch.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c
index f7df7bbbaa..f7df7bbbaa 100644
--- a/keyboard/planck/common_keymaps/keymap_mitch.c
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c
diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c
index fe8731ec7b..6558501504 100644
--- a/keyboard/planck/planck.c
+++ b/keyboard/planck/planck.c
@@ -1,28 +1,26 @@
#include "planck.h"
__attribute__ ((weak))
-void matrix_init_user(void) {
-
-}
+void matrix_init_user(void) {}
__attribute__ ((weak))
-void matrix_scan_user(void) {
+void matrix_scan_user(void) {}
-}
+__attribute__ ((weak))
+void process_action_user(keyrecord_t *record) {}
void matrix_init_kb(void) {
- #ifdef BACKLIGHT_ENABLE
- backlight_init_ports();
- #endif
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- #endif
+#ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+#endif
-
- // Turn status LED on
- DDRE |= (1<<6);
- PORTE |= (1<<6);
+ // Turn status LED on
+ DDRE |= (1<<6);
+ PORTE |= (1<<6);
matrix_init_user();
}
@@ -30,3 +28,68 @@ void matrix_init_kb(void) {
void matrix_scan_kb(void) {
matrix_scan_user();
}
+
+void process_action_kb(keyrecord_t *record) {
+ process_action_user(record);
+}
+
+#ifdef BACKLIGHT_ENABLE
+#define CHANNEL OCR1C
+
+void backlight_init_ports()
+{
+
+ // Setup PB7 as output and output low.
+ DDRB |= (1<<7);
+ PORTB &= ~(1<<7);
+
+ // Use full 16-bit resolution.
+ ICR1 = 0xFFFF;
+
+ // I could write a wall of text here to explain... but TL;DW
+ // Go read the ATmega32u4 datasheet.
+ // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
+
+ // Pin PB7 = OCR1C (Timer 1, Channel C)
+ // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
+ // (i.e. start high, go low when counter matches.)
+ // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
+ // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
+
+ TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ backlight_init();
+}
+
+void backlight_set(uint8_t level)
+{
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB7, revert to output low.
+ TCCR1A &= ~(_BV(COM1C1));
+ CHANNEL = 0x0;
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ }
+ else if ( level == BACKLIGHT_LEVELS )
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF;
+ }
+ else
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h
index e9566b9228..c5b59d9998 100644
--- a/keyboard/planck/planck.h
+++ b/keyboard/planck/planck.h
@@ -10,6 +10,7 @@
#include "rgblight.h"
#endif
#include <stddef.h>
+#include <avr/io.h>
#ifdef MIDI_ENABLE
#include <keymap_midi.h>
#endif
@@ -42,5 +43,6 @@
void matrix_init_user(void);
void matrix_scan_user(void);
+void process_action_user(keyrecord_t *record);
#endif
diff --git a/keyboard/planck/planck_pcb.hex b/keyboard/planck/planck_pcb_r3.hex
index 11f523c058..11f523c058 100644
--- a/keyboard/planck/planck_pcb.hex
+++ b/keyboard/planck/planck_pcb_r3.hex
diff --git a/keyboard/planck/planck_with_bootloader.hex b/keyboard/planck/planck_pcb_r3_w_bootloader.hex
index c61dfb743a..c61dfb743a 100755
--- a/keyboard/planck/planck_with_bootloader.hex
+++ b/keyboard/planck/planck_pcb_r3_w_bootloader.hex
diff --git a/keyboard/planck/planck_pcb_r4.hex b/keyboard/planck/planck_pcb_r4.hex
new file mode 100644
index 0000000000..bd68d9e904
--- /dev/null
+++ b/keyboard/planck/planck_pcb_r4.hex
@@ -0,0 +1,1645 @@
+:100000000C94DA040C941E050C941E050C941E0529
+:100010000C941E050C941E050C941E050C941E05D4
+:100020000C941E050C941E050C94B7180C94891999
+:100030000C94EC270C941E050C941E050C941E05C4
+:100040000C941E050C941E050C941E050C941E05A4
+:100050000C941E050C9454280C941E050C941E053B
+:100060000C941E050C941E050C941E050C941E0584
+:100070000C941E050C941E050C941E050C941E0574
+:100080000C94AD0E0C941E050C941E050C941E05CC
+:100090000C941E050C941E050C941E050C941E0554
+:1000A0000C941E050C941E050C941E0579058905FB
+:1000B0009B05AB05B105C005CC05D205E005E905FA
+:1000C000FA050A0610064006F619181A061B181A31
+:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC
+:1000E000281E281E821EC01E38213821D91E382104
+:1000F000DA1FDA1F9D20B4203821232107634236FE
+:10010000B79BD8A71A39685618AEBAAB558C1D3CA8
+:10011000B7CC5763BD6DEDFD753EF6177231BF006C
+:100120000000803F08000000BE922449123EABAAA6
+:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01
+:10014000AA3E00000000BF000000803F0000000049
+:1001500000084178D3BB4387D1133D190E3CC3BD82
+:100160004282AD2B3E68EC8276BED98FE1A93E4C2F
+:1001700080EFFFBE01C4FF7F3F00000000002B00A6
+:1001800014001A000800150017001C0018000C00CD
+:10019000120013002A0029000400160007000900BD
+:1001A0000A000B000D000E000F0033003400E100C8
+:1001B0001D001B000600190005001100100036008C
+:1001C0003700380028000530E000E200E30003308B
+:1001D0002C002C0004305000510052004F002B0026
+:1001E00014001A00090013000A000D000F00180087
+:1001F0001C0033002A002900040015001600170017
+:1002000007000B00110008000C0012003400E10090
+:100210001D001B000600190005000E00100036002E
+:100220003700380028000530E000E200E30003302A
+:100230002C002C0004305000510052004F002B00C5
+:1002400034003600370013001C0009000A000600C5
+:1002500015000F002A0029000400120008001800F1
+:100260000C0007000B001700110016003800E10019
+:10027000330014000D000E001B00050010001A00D2
+:1002800019001D0028000530E000E200E300033003
+:100290002C002C0004305000510052004F00350259
+:1002A0001E021F0220022102220223022402250232
+:1002B000260227022A004C003A003B003C003D0089
+:1002C0003E003F002D022E022F02300231020100BB
+:1002D000400041004200430044004500010001008D
+:1002E0000100010001000100010001000100010006
+:1002F000010001000100AB00AA00A900AE0035001A
+:100300001E001F00200021002200230024002500E1
+:10031000260027002A004C003A003B003C003D002C
+:100320003E003F002D002E002F0030003100010064
+:10033000400041004200430044004500010001002C
+:1003400001000100010001000100010001000100A5
+:10035000010001000100AB00AA00A900AE000000EE
+:10036000000000000000000000000000000000008D
+:10037000000000000000000000000000000000007D
+:10038000000000000000000000000000000000006D
+:10039000000000000000000000000000000000005D
+:1003A000000000000000000000000000000003301A
+:1003B00000000000043000000000000000001E00EB
+:1003C0001E001E001E001E001E001E001E001E003D
+:1003D0001E001E001E00000014001A000800150078
+:1003E00017001C0018000C00120013002F00000062
+:1003F00004001600070009000A000B000D000E00A3
+:100400000F00330034000D3000000000060019001A
+:1004100000000000110010000000000000000000BB
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000010078
+:100780000050010001000100010001000100010012
+:10079000010001004C00010001000100073006309B
+:1007A000135012500030013002300C3001000100B3
+:1007B0000B300A300930083001000100010001004F
+:1007C0000100010001000100010001000100010021
+:1007D00001000100010001000100010001002803E7
+:1007E000540068006500200050006C0061006E003D
+:1007F00063006B0020004B006500790062006F0011
+:1008000061007200640000002C034F00720074004D
+:1008100068006F006C0069006E0065006100720086
+:1008200020004B006500790062006F0061007200DB
+:100830006400730000000403090409026D00040150
+:1008400000A0FA09040000010301010009211101BF
+:100850000001223F000705810308000A0904010086
+:100860000103010200092111010001224D000705C9
+:10087000820308000A0904020001030000000921A4
+:10088000110100012236000705830308000A09044C
+:1008900003000103000000092111010001223900B9
+:1008A000070584031000011201100100000008ED8B
+:1008B000FE606001000102000105010906A10105B9
+:1008C0000719E029E7150025019508750181020542
+:1008D0000819012905950575019102950175039186
+:1008E0000105071900297715002501957875018103
+:1008F00002C005010980A101850216010026B7008A
+:100900001A01002AB700751095018100C0050C0975
+:1009100001A1018503160100269C021A01002A9CF0
+:1009200002751095018100C005010902A1010901AC
+:10093000A100050919012905150025019505750175
+:100940008102950175038101050109300931158185
+:10095000257F95027508810609381581257F950147
+:1009600075088106050C0A38021581257F950175E9
+:10097000088106C0C005010906A101050719E02983
+:10098000E71500250195087501810295017508811B
+:100990000105081901290595057501910295017553
+:1009A0000391010507190029FF150025FF9506751C
+:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B
+:1009C00004B603FE24C08091690490916A04A0914A
+:1009D0006B04B0916C048730904BA740B04BB9F4D6
+:1009E0001092690410926A0410926B0410926C04C5
+:1009F00014BE84B7877F84BF88E10FB6F8948093D4
+:100A00006000109260000FBEE0E0F8E3099513E08B
+:100A1000A0E0B1E0E2E4F4E602C005900D92A23657
+:100A2000B107D9F714E0A2E6B3E001C01D92A936E0
+:100A3000B107E1F70E94FD150C941F320C940000E1
+:100A4000279A2F988FEF9FEF9093870080938600CF
+:100A50008AE08093800089E1809381000C94562D78
+:100A6000282F81110BC080918000877F80938000A8
+:100A700010928D0010928C002F9808952F988091DD
+:100A80008000886080938000233019F48FEF9FEFFF
+:100A90000FC083E090E0821B9109880F991F2FEF10
+:100AA0003FEFA90102C0569547958A95E2F7CA0122
+:100AB00090938D0080938C000895CF93DF93EC0189
+:100AC0000E94ED28BE0180E090E0DF91CF910C9470
+:100AD00018250F931F93462F50E04E30510508F014
+:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499
+:100AF000E331882309F4D3C000E010E0980140E01E
+:100B000064E070E089E292E00E942B1281E090E0C4
+:100B10000FC0882309F4C3C000E010E0980140E052
+:100B200066E070E089EB91E00E942B1282E090E099
+:100B30000E945D05B4C0882309F4B1C000E010E054
+:100B4000980140E068E070E089EE91E00E942B128D
+:100B500084E090E0EDCF882311F083E005C083E0CE
+:100B60000CC0882349F084E00E94952540E164E0B0
+:100B700083E00E946D0A93C084E00E94B625F6CF00
+:100B8000882331F085EE0E947F1C0E94AD2D87C026
+:100B900085EE0E94471D83C0882309F480C00E940F
+:100BA000BF0D7DC0882309F47AC00E94B80D00E013
+:100BB00010E0980140E065E070E089E492E027C031
+:100BC000882309F46CC085E00E94B6250E94E00DE0
+:100BD00066C0882309F463C000E010E0980140E09B
+:100BE00068E070E089E191E00E942B1285E00E94AC
+:100BF000952555C0882309F452C00E94BE1200E01A
+:100C000010E0980140E068E070E089E191E00E9426
+:100C10002B1245C0882309F442C00E94C912EFCFAD
+:100C20008823E9F100E010E0980140E066E070E020
+:100C300089E891E00E942B1284E00E94B62583E0AF
+:100C40000E94B62580E10E94B62585E00E94B62567
+:100C50000E94E00D86E00E9495250E94DA2881110D
+:100C600002C00E94B6280E94F22890E09093680487
+:100C7000809367048068809367040E94F6280FC001
+:100C8000882369F000E010E0980140E066E070E041
+:100C900089E591E00E942B1286E00E94B62580E053
+:100CA00090E01F910F9108950F931F932FEF89EFFD
+:100CB00090E0215080409040E1F700C0000000E04B
+:100CC00010E0980140E065E070E089E492E00E9465
+:100CD0002B121F910F9108950F931F9300E010E0C6
+:100CE000980140E063E070E081E091E00E942B1207
+:100CF0002FEF82E597E0215080409040E1F700C05F
+:100D000000001F910F910895CF92DF92EF92FF9212
+:100D10000F931F93CF93DF93CDB7DEB7CC58D10994
+:100D20000FB6F894DEBF0FBECDBF2091210425FF82
+:100D3000C5C08C01FC01928180910001992309F4C6
+:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF
+:100D50000D929A95E1F7F8019081E0916203F0918C
+:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6
+:100D70003D1FE20FF31F60817181680F711D88278D
+:100D800077FD8095982F0E94F12E20E030E040E41E
+:100D900051E40E94562E6B017C01F801218184E010
+:100DA00090E0821B9109BC01882777FD8095982FE0
+:100DB0000E94F12E9B01AC01C701B6010E94EE2DED
+:100DC0009B01AC0160E070E080E090E40E94643040
+:100DD00020E030E04CE551E40E9401304FE050E06B
+:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103
+:100DF000CF911F910F91FF90EF90DF90CF900C94C7
+:100E0000CB1196E4EEE8F2E0DE01119601900D922E
+:100E10009A95E1F7F8019081E0916203F091630304
+:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9
+:100E3000E20FF31F60817181680F711D882777FDB4
+:100E40008095982F0E94F12E20E030E040E451E49C
+:100E50000E94562E6B017C01F801218184E090E014
+:100E6000821B9109BC01882777FD8095982F0E94ED
+:100E7000F12E9B01AC01C701B6010E94EE2D9B0132
+:100E8000AC0160E070E080E090E40E94643020E01B
+:100E900030E04CE551E40E940130C457DF4F0FB6FB
+:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0
+:100EB000FF90EF90DF90CF900C94130EC457DF4F4C
+:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B
+:100ED0000F91FF90EF90DF90CF90089508950E94BA
+:100EE00020056E9A769A0C9454060C946E070C9416
+:100EF00084060895880F991FFC01E250F040859107
+:100F000094910895880F991FFC01E258FE4F859136
+:100F1000949108950F931F93CF93DF93EC01811564
+:100F200020E49207A0F5C11580E3D80708F0E1C0DE
+:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C
+:100F4000D10578F4C53AD10508F074C0C130D10597
+:100F500009F46DC008F4DEC1C430D10508F0DDC16C
+:100F6000D9C1CB3BD10508F470C0D4C1C11590E202
+:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA
+:100F8000C03FD10508F4C6C18E01106506C2C1304C
+:100F900080E5D80709F4BDC068F5C13120E4D20767
+:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0
+:100FB000CF70DD278E01146DF0C1C33120E4D2075C
+:100FC00009F4A4C008F49FC0C115D04509F0A2C11E
+:100FD0000E945C210E94E00D0E946C069FEF24E3BA
+:100FE0008CE0915020408040E1F700C000000E945A
+:100FF0007928D3C1C11520E6D20730F4C11581E5A7
+:10100000D80708F48CC02DC1C11590E7D90708F4A2
+:1010100081C1C11520E8D20708F478C1C11580E963
+:10102000D80708F077C1DF708E01106AB6C101E001
+:1010300010E0B3C1C53AD10509F471C1C63AD10572
+:1010400009F070C102E810E4A8C1C83AD10509F45A
+:101050006CC1C93AD10509F46BC1CA3AD10509F48A
+:101060006AC1CB3AD10509F469C1CC3AD10509F47A
+:1010700068C1CD3AD10509F467C1C03BD10509F477
+:1010800066C1CE3AD10509F465C1CF3AD10509F45C
+:1010900064C1C13BD10509F463C1C23BD10509F468
+:1010A00062C1C33BD10509F461C1C43BD10509F458
+:1010B00060C1C53BD10509F45FC1C63BD10509F448
+:1010C0005EC1C73BD10509F45DC1C83BD10509F438
+:1010D0005CC1C93BD10509F45BC1CA3BD10509F428
+:1010E0005AC100E014E459C1CE019F700E948207EA
+:1010F00055C1DD278E01106C50C100E011ED4DC1CE
+:1011000000E010ED4AC100E012ED47C100E013ED30
+:1011100044C180913D04816080933D043EC10E94A2
+:10112000DA28811102C00E94B6280E94F22890E0BD
+:101130009093680480936704C23090E5D90721F446
+:1011400080916704816086C0C43020E5D20721F415
+:101150008091670482607EC0C63080E5D80721F4A4
+:1011600080916704846076C0C83090E5D90719F48F
+:101170008091670427C0CA3020E5D20721F480910E
+:101180006704806167C0CC3080E5D80721F4809186
+:10119000670480625FC0CE3090E5D90721F480916A
+:1011A0006704806457C0C03120E5D20721F48091E4
+:1011B000670480684FC0C23180E5D80729F4809168
+:1011C00067048460886046C0C33090E5D90721F485
+:1011D000809167048E7F3EC0C53020E5D20721F4A0
+:1011E000809167048D7F36C0C73080E5D80721F431
+:1011F000809167048B7F2EC0C93090E5D90719F420
+:101200008091670426C0CB3020E5D20721F480917D
+:1012100067048F7E1FC0CD3080E5D80721F4809110
+:1012200067048F7D17C0CF3090E5D90721F48091F6
+:1012300067048F7B0FC0C13120E5D20721F4809174
+:1012400067048F7707C0C331D04531F480916704BC
+:101250008B7F877F80936704809167040E94F628C4
+:101260009CC08D2F99278F70992781309105D9F4D3
+:101270009E012370332702C0880F991F2A95E2F739
+:101280009C688E0144E0000F111F4A95E1F700278A
+:101290001370802B912B53E0CC0FDD1F5A95E1F793
+:1012A000C076DD272FC08230910531F4DC2FCC27AA
+:1012B0008E01016F106A71C08330910569F4CE010F
+:1012C0008370992701E010E002C0000F111F8A957A
+:1012D000E2F7C8019C680FC0049709F05EC0CE0118
+:1012E0008370992701E010E002C0000F111F8A955A
+:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9
+:10130000C07ED7708C010C2B1D2B47C0DF708E0167
+:10131000106243C000E010E040C08E013EC001E812
+:1013200010E43BC003E810E438C002EE14E435C01A
+:1013300009EE14E432C00AEE14E42FC005EB14E405
+:101340002CC006EB14E429C007EB14E426C00CEC17
+:1013500014E423C00DEC14E420C003E815E41DC020
+:101360000AE815E41AC002E915E417C004E915E417
+:1013700014C001E216E411C003E216E40EC004E258
+:1013800016E40BC005E216E408C006E216E405C048
+:1013900007E216E402C00AE216E4C801DF91CF9129
+:1013A0001F910F9108959CE0799FF001112490E323
+:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7
+:1013C000E258FE4F85919491803E9105E0F4803C77
+:1013D000910558F58133910509F46FC048F48932BD
+:1013E000910509F463C08A32910509F46DC072C099
+:1013F00089339105E9F082389105D1F08533910563
+:1014000009F44DC067C0833E910581F138F4803EF8
+:101410009105B9F0823E9105D9F05CC0863E9105F8
+:1014200061F1873E9105A1F155C00E947A070895A8
+:101430002091670420FD02C021FF4CC080EE90E0A7
+:1014400049C08091670480FFF9CF89E390E042C0F2
+:101450008091670482FF0EC08091670484FF03C0FF
+:1014600080E090E037C083EE90E034C08091670464
+:1014700082FFF2CF82EE90E02DC08091670483FF5F
+:101480000BC08091670484FDEBCF87EE90E022C013
+:101490008091670483FFF5CF86EE90E01BC08091BA
+:1014A000670485FF07C089E290E014C0809167045B
+:1014B00085FFF9CF85E390E00DC08091670486FF3A
+:1014C00007C08AE290E006C08091670486FFF9CFEA
+:1014D00081E390E00E948A070895CF92DF92EF9215
+:1014E000FF920F931F9301E010E020E030E06801CD
+:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0
+:1015000004C0000F111F221F331F6A95D2F70C2948
+:101510001D292E293F29C0902104D0902204E0905B
+:101520002304F0902404C022D122E222F322842F4B
+:10153000C016D106E206F30641F41F910F91FF9009
+:10154000EF90DF90CF900C9495251F910F91FF9015
+:10155000EF90DF90CF900C94B62508950C94AD0ACF
+:101560005F926F927F928F929F92AF92BF92CF9233
+:10157000DF92EF92FF920F931F93CF93DF93CDB73C
+:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1
+:1015900001966C014E0199E0890E911C20E030E02B
+:1015A00040E050E060E070E000E010E0E12CF12C61
+:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49
+:1015C000F2E0A62DB52D872D01900D928A95E1F7B9
+:1015D000F601819191916F01FC01E07FFF27E032DC
+:1015E000F10559F48F709927F50102C0EE0FFF1F26
+:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465
+:101600008F709927F50102C0EE0FFF1F8A95E2F750
+:101610000E2B1F2B29C0E034F10559F48F70992748
+:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC
+:101630001BC0E035F10559F48F709927F50102C000
+:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1
+:10165000F10551F48F709927F50102C0EE0FFF1FBD
+:101660008A95E2F72E2B3F2BC814D90409F0A7CF97
+:1016700084B19E2D9095892384B985B1E82AE5B877
+:1016800087B1902F9095892387B988B1082B08B925
+:101690008AB1962F909589238AB98BB1682B6BB943
+:1016A0008DB1942F909589238DB98EB1482B4EB969
+:1016B00080B3922F9095892380BB81B3282B21BBC7
+:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145
+:1016D0001F910F91FF90EF90DF90CF90BF90AF9050
+:1016E0009F908F907F906F905F9008955F926F9220
+:1016F0007F928F929F92AF92BF92CF92DF92EF92A2
+:10170000FF920F931F93CF93DF93CDB7DEB7689708
+:101710000FB6F894DEBF0FBECDBF85B7806885BF1A
+:1017200085B7806885BF0E94B00ACE0101966C0122
+:101730004E0199E1890E911C20E030E040E050E03C
+:1017400060E070E000E010E0E12CF12C6C2C5D2CEE
+:1017500088E1782EAA24A394B12CECEDF2E0A62D1A
+:10176000B52D872D01900D928A95E1F7F6018191B3
+:1017700091916F01FC01E07FFF27E032F10559F400
+:101780008F709927F50102C0EE0FFF1F8A95E2F7CF
+:10179000EE2AFF2A37C0E033F10559F48F709927FC
+:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB
+:1017B00029C0E034F10559F48F709927F50102C072
+:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3
+:1017D000F10559F48F709927F50102C0EE0FFF1F34
+:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0
+:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F
+:101800002E2B3F2BC814D90409F0A7CF84B19E2DED
+:101810009095892384B985B1E82AE5B887B1902FDE
+:101820009095892387B988B1082B08B98AB1962F7A
+:10183000909589238AB98BB1682B6BB98DB1942FA0
+:10184000909589238DB98EB1482B4EB980B3922FD4
+:101850009095892380BB81B3282B21BB10926D0307
+:1018600010926C03109265031092640310926F0340
+:1018700010926E0310926703109266031092710328
+:101880001092700310926903109268031092730310
+:101890001092720310926B0310926A0368960FB64F
+:1018A000F894DEBF0FBECDBFDF91CF911F910F9196
+:1018B000FF90EF90DF90CF90BF90AF909F908F9070
+:1018C0007F906F905F900C946F077F928F929F92A2
+:1018D000AF92BF92CF92DF92EF92FF920F931F933E
+:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6
+:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7
+:1019000083E0F82E98E0792EBC2CAD2C01E010E09D
+:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6
+:10192000872D01900D928A95E1F7F60181919191B1
+:101930006F019C01207F33272032310591F424B1BF
+:101940008F709927A80102C0440F551F8A95E2F7AE
+:10195000CA01922F982B94B995B18095892385B9A6
+:1019600053C02033310591F427B18F709927F801C6
+:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E
+:1019800097B998B18095892388B93EC02034310534
+:1019900091F42AB18F709927A80102C0440F551FF6
+:1019A0008A95E2F7CA01922F982B9AB99BB180953C
+:1019B00089238BB929C02035310591F42DB18F7061
+:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9
+:1019D000922F982B9DB99EB1809589238EB914C002
+:1019E0002036310589F420B38F709927A80102C0F1
+:1019F000440F551F8A95E2F7CA01922F982B90BB8E
+:101A000091B38095892381BB50EA5A95F1F7BE01C5
+:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F
+:101A2000DE011196882D01900D928A95E1F7FB0158
+:101A300081919191BF01FC01E07FFF27E032F10528
+:101A400011F4E3B113C0E033F10511F4E6B10EC0B7
+:101A5000E034F10511F4E9B109C0E035F10511F404
+:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED
+:101A7000992702C0F595E7958A95E2F7E0FD08C041
+:101A8000C801042E02C0880F991F0A94E2F702C011
+:101A900080E090E0282B392B4F5F5F4F4C30510591
+:101AA00009F0BCCFF701808191818217930721F063
+:101AB00031832083909271020E94B00AF2E0EF0E0F
+:101AC000F11C4CE6E41643E0F40609F025CF8091C2
+:101AD0007102882361F1815080937102882339F06B
+:101AE0008FE99FE00197F1F700C0000020C08091CE
+:101AF00064039091650390936D0380936C038091D0
+:101B000066039091670390936F0380936E038091B7
+:101B1000680390916903909371038093700380919F
+:101B20006A0390916B0390937303809372030E94F6
+:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B
+:101B4000DF91CF911F910F91FF90EF90DF90CF9099
+:101B5000BF90AF909F908F907F900895E82FF0E016
+:101B6000EE0FFF1FE459FC4F808191810895089585
+:101B7000809152048160809352040C9408298091D2
+:101B800052048E7F809352040C9408290E94DA2814
+:101B9000811102C00E94B6280E9404298093520439
+:101BA0003E9A809171008D7F8093710082E08093D6
+:101BB00090008AE18093910081E0809376030895FC
+:101BC00080917603811102C00E94C60D1092C60357
+:101BD0001092C503809171008D7F80937100809178
+:101BE00090008F7780939000109288031092870363
+:101BF0001092BF031092C0031092C1031092C2034F
+:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E
+:101C100011921192119211921D921D9283E0ED3B4F
+:101C2000F807B1F70895CF92DF92EF92FF920F93EA
+:101C30001F93CF93DF9320918703222309F484C05D
+:101C40006B017C0180917603811102C00E94C60D58
+:101C50000DEB13E0C7E0D0E0A7019601F8019291E7
+:101C60008291729162918F010E94522E811131C036
+:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219
+:101C8000118212821382DE01AA0FBB1FA357BC4F21
+:101C900011961C921E92C730D105E9F0219644811D
+:101CA0005581668177814083518362837383148277
+:101CB00015821682178212968D919C911397119618
+:101CC0009C938E9313961C921E92129734961296A2
+:101CD000E2CF219708F68091C5039091C603019742
+:101CE00097FD05C09093C6038093C50304C010926E
+:101CF000C6031092C5038091C5039091C60320913D
+:101D0000C3033091C4032817390724F01092C40389
+:101D10001092C303892BC1F4809171008D7F809351
+:101D20007100809190008F77809390001092BF0394
+:101D30001092C0031092C1031092C2031092BE030E
+:101D40001092BD0310928703DF91CF911F910F91E5
+:101D5000FF90EF90DF90CF9008951F920F920FB6F3
+:101D60000F9211244F925F926F927F928F929F9267
+:101D7000AF92BF92CF92DF92EF92FF922F933F9359
+:101D80004F935F936F937F938F939F93AF93BF9383
+:101D9000CF93DF93EF93FF9380918703882309F418
+:101DA0009BC1C091C503D091C6031C161D060CF043
+:101DB00093C14090770350907803609079037090BE
+:101DC0007A0320E030E0A901C301B2010E94FD2F97
+:101DD00018160CF065C0C130D10509F452C08091CD
+:101DE000C3039091C403BE010E94CF317C01909344
+:101DF000C4038093C3038090890390908A03A090CA
+:101E00008B03B0908C0320E030E040E85FE3C50135
+:101E1000B4010E94EE2D6093890370938A0380932E
+:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44
+:101E3000E356FC4FA30192016081718182819381FD
+:101E40000E94562E20E030E040E05EE30E94013028
+:101E50009B01AC01C501B4010E94FD2F18168CF442
+:101E6000C7010196BE010E94CF319093C4038093B5
+:101E7000C3031092890310928A0310928B0310926D
+:101E80008C03E091C303F091C403EE0FFF1FEE0F2C
+:101E9000FF1FE356FC4F6081718182819381D0C026
+:101EA000C090BF03D090C003E090C103F090C20384
+:101EB00020E030E0A901C701B6010E94522E21970F
+:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3
+:101ED000E356FC4F80809180A280B380A5019401DD
+:101EE000C701B6010E94522E87FF31C0A50194019F
+:101EF00060E070E08CED93EC0E94562E20E030E024
+:101F000040E451E40E94562E20E030E040E05FE3E0
+:101F10000E9401309B01AC0160E070E080E090E441
+:101F20000E9464309B01AC01C501B4010E940130E4
+:101F30009B01AC01C701B6010E94522E87FF07C06A
+:101F4000A701960160E070E08CED93E439C0A50133
+:101F50009401C701B6010E94FD2F18160CF055C060
+:101F6000A501940160E070E08CED93E40E94562E90
+:101F700020E030E040E451E40E94562E20E030E0C2
+:101F800040E05FE30E9401309B01AC0160E070E043
+:101F900080E090E40E9464309B01AC01C501B40173
+:101FA0000E9401309B01AC01C701B6010E94FD2FC8
+:101FB00018165CF5A701960160E070E08CED93ECDB
+:101FC0000E94562E20E030E040E451E40E94562E5C
+:101FD00020E030E040E05FE30E9401309B01AC0173
+:101FE00060E070E080E090E40E9464309B01AC010E
+:101FF000C701B6010E9401306093BF037093C00314
+:102000008093C1039093C20313C0FE01EE0FFF1F24
+:10201000EE0FFF1FE356FC4F80819181A281B381B7
+:102020008093BF039093C003A093C103B093C203F6
+:102030006091BF037091C0038091C1039091C2036E
+:1020400020917403309175032F3F4FEF340731F027
+:102050002F5F3F4F30937503209374030E94D41277
+:102060006B017C0120E034E244EF51E40E94522EE7
+:1020700087FF08C086EFC82E88E2D82E84EFE82EAE
+:1020800081E4F82E20E030E040E051E4C701B601E1
+:102090000E9401309B01AC0160E074E284E79BE4A4
+:1020A0000E94562E6B017C010E94BE2E70939700F9
+:1020B00060939600209172023091730240917402F5
+:1020C00050917502C701B6010E9401300E94BE2ED8
+:1020D000709399006093980080918803882309F495
+:1020E00033C1C0908303D0908403E0908503F090C7
+:1020F000860320E030E0A901C701B6010E94FD2F50
+:102100001816D4F580917403909175038F3F2FEFCB
+:10211000920729F001969093750380937403C70189
+:10212000B6010E94D41220E030E040E051E40E9469
+:1021300001309B01AC0160E074E284E79BE40E9403
+:10214000562E6B017C010E94BE2E70939700609307
+:102150009600209172023091730240917402509166
+:102160007502C701B6010E9401300E94BE2E709315
+:1021700099006093980008C0109297001092960002
+:10218000109299001092980060917D0370917E03E7
+:102190006F5F7F4F70937E0360937D032091960065
+:1021A0003091970080E090E0232BF1F0C0919600F1
+:1021B000D09197000E94EF2E6B017C01BE0180E060
+:1021C00090E00E94EF2E9B01AC0160917F03709123
+:1021D000800380918103909182030E94562E20E01B
+:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8
+:1021F00020E030EE4FEF54E460917F037091800354
+:1022000080918103909182030E9401309B01AC0177
+:10221000C701B6010E94FD2F87FD96C080917B0308
+:102220008F5F80937B0390E020914E0430914F04A8
+:1022300082179307A0F080915904882319F0109217
+:102240007B030DC0809171008D7F80937100809120
+:1022500090008F7780939000109288037DC08091CA
+:102260007C03C0917B03811128C0C0905304D0909F
+:102270005404E0905504F090560420E030E0A901A9
+:10228000C701B6010E94FD2F1816BCF481E08093AF
+:102290007C031092830310928403109285031092A2
+:1022A0008603C0927F03D0928003E0928103F09274
+:1022B0008203C150C0937B0343C010927C031092F1
+:1022C000750310927403E0915004F091510448E0BA
+:1022D000C49FE00DF11D112480819181A281B38101
+:1022E0008093830390938403A0938503B093860324
+:1022F00020E030E040E85EE364817581868197816B
+:102300000E9401306B017C0120E030E048EC52E497
+:1023100060917602709177028091780290917902B3
+:102320000E94562E9B01AC01C701B6010E940130EC
+:1023300060937F0370938003809381039093820363
+:1023400010927E0310927D038091520480FD04C0A0
+:102350001092880310928703FF91EF91DF91CF9144
+:10236000BF91AF919F918F917F916F915F914F91AD
+:102370003F912F91FF90EF90DF90CF90BF90AF9063
+:102380009F908F907F906F905F904F900F900FBEB7
+:102390000F901F901895CF92DF92EF92FF92CF93FC
+:1023A000DF936B017C01EA0180917603811102C009
+:1023B0000E94C60D8091520480FF46C08091C503E3
+:1023C0009091C60308970CF03FC0809171008D7FFB
+:1023D000809371008091880381110E94E00D81E05B
+:1023E00080938703109275031092740320E030E00D
+:1023F000A901C701B6010E94FD2F1816DCF48091D7
+:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7
+:10241000E356FC4FC082D182E282F382FC01EE0FD0
+:10242000FF1FE357FC4FD183C08301969093C603EF
+:102430008093C503809171008260809371008091C8
+:102440009000806880939000DF91CF91FF90EF9093
+:10245000DF90CF9008958F929F92AF92BF92CF92CC
+:10246000DF92EF92FF920F931F93CF93DF93EC01D4
+:102470007B01D42E4801590180917603811102C05D
+:102480000E94C60D8091520480FF6BC08091710044
+:102490008D7F809371008091870381110E94E00DF0
+:1024A00081E080938803D0935104C0935004F0924C
+:1024B0004F04E0924E04D0925904809253049092BB
+:1024C0005404A0925504B0925604109289031092BD
+:1024D0008A0310928B0310928C0310927B038881E5
+:1024E0009981AA81BB818093830390938403A093F5
+:1024F0008503B093860320E030E040E85EE36C8122
+:102500007D818E819F810E9401306B017C0120E0E2
+:1025100030E048EC52E4609176027091770280914D
+:102520007802909179020E94562E9B01AC01C7015E
+:10253000B6010E94013060937F0370938003809303
+:1025400081039093820310927E0310927D03809109
+:102550007100826080937100809190008068809308
+:102560009000DF91CF911F910F91FF90EF90DF903E
+:10257000CF90BF90AF909F908F9008958091C703A8
+:1025800090E0019666E070E00E94CF318093C7032F
+:1025900008958091C70390E0019766E070E00E9483
+:1025A000CF318093C70308958F929F92AF92BF92CD
+:1025B000CF92DF92EF92FF920F931F93CF93DF930F
+:1025C0006B017C01C0917403D0917503BE0180E062
+:1025D00090E00E94EF2E4B015C01A701960160E0A4
+:1025E00070E08CE594E40E94562E9B01AC01C5017D
+:1025F000B4010E9401300E94C32E2091C7032330F2
+:1026000009F473C028F4222351F02130E9F02CC1E1
+:10261000243009F4A0C0253009F4E0C025C180E0D1
+:1026200090E0A0E0BFE38093720290937302A093C6
+:102630007402B0937502109277031092780310928F
+:10264000790310927A0310C11092770310927803E5
+:102650001092790310927A036431710540F46A3064
+:10266000710560F520E030E040E85EE32BC0693C96
+:10267000710508F0AAC080E090E00E94EF2E20E0F3
+:1026800030E040EA51E40E94ED2D20E030E044E3E8
+:1026900053E40E94562E9B01AC010E94013020E0C1
+:1026A00030E040E05EE30E9401309B01AC0160E05D
+:1026B00070E080E09EE30E94ED2D44C020E030E019
+:1026C00040E05FE3C701B6010E9401306B017C016D
+:1026D00080E090E0A0E0BEE38093720290937302EA
+:1026E000A0937402B0937502BFC01092770310924A
+:1026F00078031092790310927A034AE0469F900182
+:10270000479F300D1124C90168EB7BE00E94BB316B
+:10271000BC016C5D754077FF03C0719561957109CF
+:10272000882777FD8095982F0E94F12E2EE333ECB9
+:102730004EE259E30E94013020E030E040EC5EE3DD
+:102740000E94EE2D60937202709373028093740264
+:102750009093750289C010927703109278031092BB
+:10276000790310927A03CE0183709927892BE1F0C7
+:10277000BE016170772780E090E00E94EF2E20E09C
+:1027800030E040E05EE30E94013020E030E040E4D1
+:102790005FE30E94EE2D6093720270937302809348
+:1027A0007402909375020CC080E090E0A0E0BFE35B
+:1027B0008093720290937302A0937402B093750297
+:1027C000C770DD27CD2B09F04FC010927202109216
+:1027D0007302109274021092750246C01092770331
+:1027E000109278031092790310927A0300E010E0BF
+:1027F00020E03FE30093720210937302209374026F
+:10280000309375026739710578F180E090E00E949D
+:10281000EF2E20E030E047E153E40E94ED2D20E070
+:1028200030E04AE754E40E94562E20E030E048E4CD
+:1028300052E40E94013020E030E040EA51E40E947E
+:10284000332F0E94BE2E660F771F660F771FFB0186
+:10285000EC50FD4F2081318142815381C701B60187
+:102860000E9401306B017C01C701B601DF91CF915D
+:102870001F910F91FF90EF90DF90CF90BF90AF909E
+:102880009F908F9008958091D8030895CF93DF9300
+:1028900000D01F92CDB7DEB79C0180915E048430DA
+:1028A00019F593E099833B832A839093E9008FEF96
+:1028B0009091E800815095FD06C095ED9A95F1F74D
+:1028C00000008111F5CF8091E80085FF0DC040E048
+:1028D00050E063E070E0CE0101960E94A71680915F
+:1028E000E8008E778093E8000F900F900F90DF91B3
+:1028F000CF910895CF93DF9300D01F92CDB7DEB76D
+:1029000020915E04243021F522E029839B838A8371
+:1029100083E08093E9008FEF9091E800815095FD6E
+:1029200006C095ED9A95F1F700008111F5CF8091E1
+:10293000E80085FF0DC040E050E063E070E0CE01AC
+:1029400001960E94A7168091E8008E778093E80098
+:102950000F900F900F90DF91CF91089520915E041A
+:102960002430F1F422E02093E9002FEF3091E800C9
+:10297000215035FD06C035ED3A95F1F700002111E3
+:10298000F5CF2091E80025FF0BC040E050E065E066
+:1029900070E00E94A7168091E8008E778093E8008F
+:1029A0000895CF93DF93EC0190915E04943009F089
+:1029B00046C0809184028823D9F0809185028823C3
+:1029C000B9F09093E9008FEF9091E800815095FD68
+:1029D00006C095E19A95F1F700008111F5CF80913D
+:1029E000E80085FF2CC040E050E060E170E017C0D7
+:1029F00081E08093E9008FEF9091E800815095FD90
+:102A000006C095ED9A95F1F700008111F5CF809100
+:102A1000E80085FF14C040E050E068E070E0CE01BF
+:102A20000E94A7168091E8008E778093E80080E1ED
+:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9
+:102A4000CF91089580915D04811109C00E943C18C6
+:102A50000E9499188091E20084608093E2000895BA
+:102A600010925D040895089508950C94E12742E0C2
+:102A700061EC81E00E94B61742E061EC82E00E94C6
+:102A8000B61742E061EC83E00E94B61742E161ECC8
+:102A900084E00C94B61780916004833009F455C02B
+:102AA00030F4813071F0823009F48EC008958A309C
+:102AB00009F47AC08B3009F460C0893009F09CC0F9
+:102AC00020C080915F04813A09F096C08091E800AF
+:102AD000877F8093E8008091630490916404892B40
+:102AE00021F460E188EC93E003C060E080E090E0D6
+:102AF00070E00E94F2168091E8008B778093E800E6
+:102B0000089580915F04813209F076C0809163045A
+:102B100090916404009719F0039709F06DC08091BB
+:102B2000E800877F8093E8008091E80082FD05C07F
+:102B300080915E048111F8CF5FC08091F100809395
+:102B4000D8038091E8008B7753C080915F04813A6D
+:102B500009F052C08091630490916404892B09F0BC
+:102B60004BC08091E800877F8093E8008091E80067
+:102B700080FFFCCF8091840236C080915F04813257
+:102B8000D9F58091630490916404892BA9F5809113
+:102B9000E800877F8093E8000E94EB178091610432
+:102BA000809384020C945C2180915F04813221F532
+:102BB0008091E800877F8093E8000E94EB17809166
+:102BC00062048093D903089580915F04813AA1F44F
+:102BD0008091E800877F8093E8008091E80080FF83
+:102BE000FCCF8091D9038093F1008091E8008E772B
+:102BF0008093E8000C94EB17089584B7877F84BF17
+:102C000088E10FB6F89480936000109260000FBEC8
+:102C100090E080E80FB6F894809361009093610093
+:102C20000FBE0E948E1B0E943C180E949918809132
+:102C3000E20084608093E20078940E941F1B0E944F
+:102C4000901B8AE792E00E943A1B80915E048530D7
+:102C500069F40E949B2780915C048823B1F30E9451
+:102C6000C927882391F30E949116EFCF0E94981BE9
+:102C7000ECCF292F332723303105C9F064F42130FC
+:102C8000310581F02230310509F043C08DE690E036
+:102C90002AE338E042C021323105F1F02232310519
+:102CA00041F137C082E190E027EA38E036C0992749
+:102CB0008130910541F08230910541F0892B49F531
+:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A
+:102CD000849190E09F0121C06430D8F4E62FF0E0A9
+:102CE000EE0FFF1FE05BFC4F2081318189E090E017
+:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E
+:102D0000FC4F20813181FB01EC5BFC4F808190E026
+:102D100004C080E090E020E030E0FA0131832083BD
+:102D2000089580E189BD82E189BD09B400FEFDCF2F
+:102D30008091D8008F7D8093D8008091E0008260E0
+:102D40008093E0008091E00081FDFCCF0895CF9258
+:102D5000DF92EF92FF920F931F93CF93DF93EC01DB
+:102D60008B016A010E940A18811133C0C114D10479
+:102D700039F0F60180819181081B190BC80FD91F0A
+:102D8000E12CF12C0115110519F18091E80085FD68
+:102D900016C08091E8008E778093E800C114D104BA
+:102DA00049F0F60180819181E80EF91EF182E082FE
+:102DB00085E00FC00E940A18882321F30AC0899178
+:102DC0008093F10001501109FFEFEF1AFF0ADACFEB
+:102DD00080E0DF91CF911F910F91FF90EF90DF90F6
+:102DE000CF90089520916504309166042617370727
+:102DF00048F06115710539F42091E8002E77209391
+:102E0000E80001C0B90140E061157105A9F1209108
+:102E10005E04222309F443C0253009F442C0209106
+:102E2000E80023FD40C02091E80022FD32C020913F
+:102E3000E80020FFE9CF4091F3002091F20030E05C
+:102E4000342BFC01CF016115710559F02830310593
+:102E500040F481918093F100615071092F5F3F4FE1
+:102E6000F1CF41E02830310509F040E02091E80041
+:102E70002E772093E800C8CF4111C9CF0AC08091B6
+:102E80005E04882361F0853061F08091E80083FD65
+:102E90000AC08091E80082FFF2CF80E0089582E0CE
+:102EA000089583E0089581E00895209165043091AC
+:102EB00066042617370748F06115710539F420912B
+:102EC000E8002E772093E80001C0B901FC0120E062
+:102ED0006115710591F180915E04882309F440C069
+:102EE000853009F43FC08091E80083FD3DC08091AA
+:102EF000E80082FD2FC08091E80080FFE9CF20919B
+:102F0000F3008091F20090E0922B6115710559F069
+:102F10008830910540F424912093F100319661505E
+:102F200071090196F2CF21E0089709F020E0809125
+:102F3000E8008E778093E800CBCF2111CCCF0AC078
+:102F400080915E04882361F0853061F08091E80013
+:102F500083FD0AC08091E80082FFF2CF80E00895EF
+:102F600082E0089583E0089581E00895982F9730D6
+:102F700058F59093E900981739F07091EC00209182
+:102F8000ED005091F00003C0242F762F50E021FF78
+:102F900019C03091EB003E7F3093EB003091ED0093
+:102FA0003D7F3093ED003091EB0031603093EB00CA
+:102FB0007093EC002093ED005093F0002091EE0010
+:102FC00027FF07C09F5FD3CF8F708093E90081E018
+:102FD000089580E0089580915F0487FF11C080917B
+:102FE000E80082FD05C080915E048111F8CF11C018
+:102FF0008091E8008B770BC080915E04882349F0B4
+:103000008091E80080FFF8CF8091E8008E77809370
+:10301000E80008952091E4003091E50095E64091A4
+:10302000EC00842F817040FF22C08091E80080FD79
+:103030001CC080915E04882391F0853091F08091CE
+:10304000EB0085FD10C04091E4005091E50042176F
+:10305000530729F39A01915011F784E0089582E013
+:10306000089583E0089581E0089580E008954091F7
+:10307000E80042FFDECF08950E94AA180E94B2180D
+:10308000E0EEF0E0808181608083E8EDF0E0808117
+:103090008F77808319BCA7EDB0E08C918E7F8C93E5
+:1030A00080818F7E808310925D0408950F931F931B
+:1030B000CF93DF930E94AA180E94B218C8EDD0E007
+:1030C00088818F77888388818068888388818F7DD5
+:1030D000888319BC10925E0410925A0410925C040A
+:1030E00010925B0400EE10E0F80180818B7F8083FA
+:1030F00088818160888342E060E080E00E94B617AA
+:10310000E1EEF0E080818E7F8083E2EEF0E080816E
+:1031100081608083808188608083F80180818E7FD8
+:103120008083888180618883DF91CF911F910F9187
+:103130000895E8EDF0E080818F7E8083E7EDF0E098
+:1031400080818160808384E082BF81E080935D0420
+:103150000C945618E8EDF0E080818E7F8083109209
+:10316000E20008951092DA001092E10008951F9293
+:103170000F920FB60F9211242F933F934F935F93AB
+:103180006F937F938F939F93AF93BF93EF93FF932F
+:103190008091E10082FF0BC08091E20082FF07C0B6
+:1031A0008091E1008B7F8093E1000E941E1B809143
+:1031B000DA0080FF1FC08091D80080FF1BC0809183
+:1031C000DA008E7F8093DA008091D90080FF0DC0F5
+:1031D00080E189BD82E189BD09B400FEFDCF81E0B7
+:1031E00080935E040E94221505C019BC10925E04F3
+:1031F0000E9430158091E10080FF19C08091E200AB
+:1032000080FF15C08091E2008E7F8093E200809164
+:10321000E20080618093E2008091D8008062809318
+:10322000D80019BC85E080935E040E94341580911B
+:10323000E10084FF30C08091E20084FF2CC080E177
+:1032400089BD82E189BD09B400FEFDCF8091D8001F
+:103250008F7D8093D8008091E1008F7E8093E10084
+:103260008091E2008F7E8093E2008091E200816095
+:103270008093E20080915A04882311F084E007C013
+:103280008091E30087FD02C081E001C083E080936C
+:103290005E040E9435158091E10083FF29C0809172
+:1032A000E20083FF25C08091E100877F8093E100E9
+:1032B00082E080935E0410925A048091E1008E7F38
+:1032C0008093E1008091E2008E7F8093E200809104
+:1032D000E20080618093E20042E060E080E00E94D2
+:1032E000B6178091F00088608093F0000E9433153B
+:1032F000FF91EF91BF91AF919F918F917F916F91CE
+:103300005F914F913F912F910F900FBE0F901F90A3
+:1033100018951F920F920FB60F9211242F933F937F
+:103320004F935F936F937F938F939F93AF93BF93CD
+:10333000CF93DF93EF93FF93C091E900CF7080911B
+:10334000EC00D82FD17080FDD0E81092E900809178
+:10335000F000877F8093F00078940E94CD1910923E
+:10336000E9008091F00088608093F000CD2BCF7051
+:10337000C093E900FF91EF91DF91CF91BF91AF91A1
+:103380009F918F917F916F915F914F913F912F917D
+:103390000F900FBE0F901F9018951F93CF93DF9340
+:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C
+:1033B000EFE5F4E088E08E0F9091F10091938E1389
+:1033C000FBCF0E944B158091E80083FF1FC18091C5
+:1033D0005F0490916004492F50E04A30510508F095
+:1033E00015C1FA01EC59FF4F0C94E331803881F09C
+:1033F000823809F00BC1809163048F708093E900DB
+:103400008091EB0085FB882780F91092E90006C0C7
+:1034100080915B0490915C04911182609091E8002E
+:10342000977F9093E8008093F1001092F100C8C05C
+:10343000282F2D7F09F0EAC0882319F0823061F02F
+:10344000E5C080916104813009F0E0C0933009F05B
+:1034500080E080935C042BC080916104811127C0BF
+:10346000809163048F7009F4D1C08093E9002091AA
+:10347000EB0020FF1CC0933021F48091EB008062B0
+:1034800014C09091EB0090619093EB0021E030E04C
+:10349000A90102C0440F551F8A95E2F74093EA0044
+:1034A0001092EA008091EB0088608093EB0010920C
+:1034B000E9008091E800877F86C08111A7C0109144
+:1034C00061041F778091E3008078812B8093E30073
+:1034D0008091E800877F8093E8000E94EB1780913D
+:1034E000E80080FFFCCF8091E30080688093E300D8
+:1034F000111102C082E001C083E080935E0486C0A7
+:103500008058823008F082C08091610490916204FA
+:103510008C3D53E0950779F583E08A838AE28983BD
+:103520004FB7F894DE01139620E03EE051E2E32F1E
+:10353000F0E050935700E49120FF03C0E295EF7054
+:103540003F5FEF708E2F90E0EA3010F0C79601C019
+:10355000C0968D939D932F5F243149F74FBF809183
+:10356000E800877F8093E8006AE270E0CE01019670
+:103570000E94F21614C0AE014F5F5F4F609163046A
+:103580000E943916BC01009709F440C09091E800F0
+:10359000977F9093E80089819A810E9455178091C6
+:1035A000E8008B778093E80031C0803879F580910E
+:1035B000E800877F8093E80080915A048093F100AF
+:1035C0008091E8008E778093E8000E94EB171EC080
+:1035D00081111CC0909161049230C0F48091E80088
+:1035E000877F8093E80090935A040E94EB178091A4
+:1035F0005A04811106C08091E30087FD02C081E07A
+:1036000001C084E080935E040E9437158091E80039
+:1036100083FF0AC08091E800877F8093E800809153
+:10362000EB0080628093EB00AA960FB6F894DEBFA1
+:103630000FBECDBFDF91CF911F9108950895CF9315
+:1036400080915E048823A1F0C091E900CF70909131
+:10365000EC00892F817090FD80E8C82B1092E90062
+:103660008091E80083FD0E94CD19CF70C093E900DE
+:10367000CF9108959093DF038093DE030895E09146
+:10368000DE03F091DF03309721F00190F081E02D0F
+:10369000099480E00895E091DE03F091DF03309714
+:1036A00021F00280F381E02D09940895E091DE037A
+:1036B000F091DF03309721F00480F581E02D09942B
+:1036C00008952091DC033091DD038217930771F098
+:1036D0009093DD038093DC03E091DE03F091DF0340
+:1036E000309721F00680F781E02D0994089520910C
+:1036F000DA033091DB038217930771F09093DB03B9
+:103700008093DA03E091DE03F091DF03309721F03C
+:103710000084F185E02D0994089508950C948D1B83
+:103720000E9415280E94760B0E949B280C94562D0F
+:103730004F925F927F928F929F92AF92BF92CF9261
+:10374000DF92EF92FF920F931F93CF93DF93CDB74A
+:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A
+:10376000650C91EEC92E93E0D92E00E010E0AA245A
+:10377000A394B12C702E802F0E94AE0D4C01F60147
+:10378000419051906F014826592641145104B1F4DB
+:103790000F5F1F4F0430110569F78FEF89838A830C
+:1037A0001B820E941E288160782F9D838C83498113
+:1037B0005A816B818D810E94511C3AC080913D04D9
+:1037C00081FD0E94B70D20E030E07501022E02C09D
+:1037D000EE0CFF1C0A94E2F7C70184219521892B86
+:1037E00009F12E837F828E209F2091E0892809F4A1
+:1037F00090E098870E941E288160782F9A87898799
+:103800004E815F8168858A850E94511C000F111FBF
+:10381000F801EF51FC4F80819181E826F926F18271
+:10382000E08206C02F5F3F4F2C30310571F6B0CFDC
+:103830000E94872A1091E0030E943F1B1817D9F0BD
+:103840000E943F1B8093E0032A960FB6F894DEBFD8
+:103850000FBECDBFDF91CF911F910F91FF90EF90E1
+:10386000DF90CF90BF90AF909F908F907F905F90B0
+:103870004F900C94AE0A2A960FB6F894DEBF0FBE96
+:10388000CDBFDF91CF911F910F91FF90EF90DF900F
+:10389000CF90BF90AF909F908F907F905F904F9010
+:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B
+:1038B000DEBF0FBECDBF4F83588769877A878B875E
+:1038C000DE01119686E0FD0111928A95E9F785E007
+:1038D000FE01379601900D928A95E1F749815A8150
+:1038E0006B817C818D819E810E94F6232B960FB681
+:1038F000F894DEBF0FBECDBFDF91CF910895CF9377
+:10390000882309F4C2C0C82F823859F40E943F1B93
+:1039100081FDBBC089E30E949F260E946C2789E33A
+:103920000CC0833879F40E943F1B80FDAEC083E554
+:103930000E949F260E946C2783E50E94E126CF917A
+:103940000C946C27843859F40E943F1B82FD9DC063
+:1039500087E40E949F260E946C2787E4EECF8CEFBD
+:103960008C0F813A48F48C2F0E94BE2C81118DC09F
+:103970008C2F0E949F26E3CF80E28C0F883048F482
+:10398000C77081E001C0880FCA95EAF70E94252719
+:10399000D6CF8BE58C0F833078F4C53A29F0C63A40
+:1039A00031F083E890E005C081E890E002C082E851
+:1039B00090E0CF910C94611B88E58C0F833108F067
+:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F
+:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F
+:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F
+:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D
+:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092
+:103A100090E038C082EE90E035C089EE90E032C090
+:103A20008AEE90E02FC085EB90E02CC086EB90E012
+:103A300029C087EB90E026C08CEC90E023C08DEC91
+:103A400090E020C083E891E01DC08AE891E01AC0B0
+:103A500082E991E017C084E991E014C081E292E02C
+:103A600011C083E292E00EC084E292E00BC085E2D6
+:103A700092E008C086E292E005C087E292E002C0D0
+:103A80008AE292E0CF910C94771BCF91089588231E
+:103A900009F44BC0823859F40E943F1B81FF45C096
+:103AA00089E30E949F260E946C2789E30CC083381B
+:103AB00071F40E943F1B80FF38C083E50E949F265F
+:103AC0000E946C2783E50E94E1260C946C278438C1
+:103AD00059F40E943F1B82FF28C087E40E949F2662
+:103AE0000E946C2787E4EFCF9CEF980F913A58F330
+:103AF00090E2980F983050F4877091E001C0990FD0
+:103B00008A95EAF7892F0E942B27DFCF9BE5980F34
+:103B1000933020F480E090E00C94611B885A83314C
+:103B200020F480E090E00C94771B0895882321F026
+:103B30000E9425270C946C270895882321F00E9469
+:103B40002B270C946C270895BF92CF92DF92EF92AF
+:103B5000FF920F931F93CF93DF9300D000D000D03C
+:103B6000CDB7DEB725E0FC01DE01119601900D9284
+:103B70002A95E1F7FC01D0801181028125812295EF
+:103B80002F7043815481452B09F472C31F3F21F4E8
+:103B9000FFEFDF1609F46CC37C012E830E947707C8
+:103BA000D9821A8369817A81802F0E949B26182FDF
+:103BB000B92E0E9450260E9417252E81002319F04D
+:103BC0000E9442272E81EB2DE295EF70F0E0E25942
+:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E
+:103BE000882319F0F29480EFF822002389F0FF2057
+:103BF00009F47CC280E2810F883020F48F2D0E946E
+:103C0000252703C08F2D0E9435270E946C276EC286
+:103C1000812F0E94471DFF2009F42AC3105E8F2DBB
+:103C2000183018F40E942B2702C00E943B272696CA
+:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD
+:103C40000F91FF90EF90DF90CF90BF900C946C2776
+:103C50008B2D807F9B2D9F70803211F4892F03C0A4
+:103C6000892F8295807F112319F0113011F12BC01B
+:103C70000023A9F0222389F1213079F526960FB689
+:103C8000F894DEBF0FBECDBFDF91CF911F910F9192
+:103C9000FF90EF90DF90CF90BF900C945527222398
+:103CA00019F0213009F4E4C28E830E9458278E81D6
+:103CB0009BC1002321F0263008F0DAC20EC0253067
+:103CC00008F0D6C291C10023C9F0222331F0F701D8
+:103CD000958190FF0BC29F70958326960FB6F8943E
+:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F
+:103CF000EF90DF90CF90BF900C94961D222309F493
+:103D000073C109C22B2D26952695237030E021150D
+:103D1000310521F021303105D1F0AAC2002321F074
+:103D2000812F9B2D937002C080E090E026960FB605
+:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1
+:103D4000FF90EF90DF90CF90BF900C94611B002309
+:103D500021F0812F9B2D937002C080E090E0269689
+:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C
+:103D70000F91FF90EF90DF90CF90BF900C94771B46
+:103D8000812F002319F00E948F2902C00E94F72979
+:103D900026960FB6F894DEBF0FBECDBFDF91CF9150
+:103DA0001F910F91FF90EF90DF90CF90BF900C94F8
+:103DB0007C2A8B2D837009F07BC0011159C2812FA1
+:103DC000829586958770880F880F912F9F70C92ED6
+:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7
+:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD
+:103DF00070E004C0440F551F661F771F8A95D2F7E5
+:103E0000CB01BA01609570958095909503C060E0F4
+:103E100070E0CB012B2D269526952370422F50E084
+:103E200042305105D9F04330510569F16C297D29A3
+:103E30008E299F294130510551F126960FB6F894ED
+:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD
+:103E5000EF90DF90CF90BF900C943E256C297D2988
+:103E60008E299F2926960FB6F894DEBF0FBECDBFD0
+:103E7000DF91CF911F910F91FF90EF90DF90CF9046
+:103E8000BF900C945A250E943E25C701B601269684
+:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B
+:103EA0000F91FF90EF90DF90CF90BF900C94222560
+:103EB000002319F08B2D817001C08695882309F4A9
+:103EC000D7C1812F829586958770880F880F912F93
+:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3
+:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039
+:103EF00050E060E070E004C0440F551F661F771F5C
+:103F00008A95D2F7CB01BA0160957095809590950E
+:103F100003C060E070E0CB012B2D26952695237021
+:103F2000422F50E042305105D9F04330510569F13C
+:103F30006C297D298E299F294130510551F1269602
+:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA
+:103F50000F91FF90EF90DF90CF90BF900C941826B8
+:103F60006C297D298E299F2926960FB6F894DEBFED
+:103F70000FBECDBFDF91CF911F910F91FF90EF90BA
+:103F8000DF90CF90BF900C9434260E941826C70172
+:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7
+:103FA000CF911F910F91FF90EF90DF90CF90BF9036
+:103FB0000C94FC25103F49F118F4103E48F491C0D0
+:103FC000123F09F453C0E8F1133F09F464C089C0FB
+:103FD0001F708B2D8F71002321F00E949525812F5A
+:103FE0007CCE0E94B625812F26960FB6F894DEBFB0
+:103FF0000FBECDBFDF91CF911F910F91FF90EF903A
+:10400000DF90CF90BF900C949D1D0023B1F0253020
+:1040100008F02EC18B2D8F7126960FB6F894DEBF57
+:104020000FBECDBFDF91CF911F910F91FF90EF9009
+:10403000DF90CF90BF900C94DB25263008F018C19C
+:10404000E9CF0023A9F08B2D8F7126960FB6F89437
+:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB
+:10406000EF90DF90CF90BF900C949525002359F3EB
+:104070008B2D8F7126960FB6F894DEBF0FBECDBF85
+:10408000DF91CF911F910F91FF90EF90DF90CF9034
+:10409000BF900C94B625002399F08B2D8F71269636
+:1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149
+:1040B0000F91FF90EF90DF90CF90BF900C948025F0
+:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D
+:1040D0001F910F91FF90EF90DF90CF90BF900C94C5
+:1040E00076250023A9F0222309F4ADCF812F26964F
+:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9
+:104100000F91FF90EF90DF90CF90BF900C947F1CA9
+:10411000222309F4ADCF812F26960FB6F894DEBF87
+:104120000FBECDBFDF91CF911F910F91FF90EF9008
+:10413000DF90CF90BF900C94471D4B2D4F70612F97
+:10414000C7010E94690526960FB6F894DEBF0FBE20
+:10415000CDBFDF91CF911F910F91FF90EF90DF9036
+:10416000CF90BF900C949A24011182C09B2D9F7018
+:10417000492F50E04230510509F443C0C4F44115C1
+:10418000510571F14130510509F072C026960FB604
+:10419000F894DEBF0FBECDBFDF91CF911F910F917D
+:1041A000FF90EF90DF90CF90BF900C947E2D433026
+:1041B0005105C1F14430510509F05AC0812F2696AE
+:1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128
+:1041D0000F91FF90EF90DF90CF90BF900C94D02D77
+:1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC
+:1041F0001F910F91FF90EF90DF90CF90BF900C94A4
+:10420000672D26960FB6F894DEBF0FBECDBFDF91A7
+:10421000CF911F910F91FF90EF90DF90CF90BF90C3
+:104220000C949A2D26960FB6F894DEBF0FBECDBF24
+:10423000DF91CF911F910F91FF90EF90DF90CF9082
+:10424000BF900C94AD2D4B2D4F70612FC70126965A
+:104250000FB6F894DEBF0FBECDBFDF91CF911F9197
+:104260000F91FF90EF90DF90CF90BF900C94790763
+:1042700026960FB6F894DEBF0FBECDBFDF91CF916B
+:104280001F910F91FF90EF90DF90CF90BF90089516
+:104290000E9442270E9452270E9417270E946C27E3
+:1042A0000E942D2B0E947C2A80E090E00E94611BDE
+:1042B00080E090E00C94771B0E9432270C944821F8
+:1042C0000E949026292F22952F7030E02C30310546
+:1042D0004CF42A3031056CF422503109223031057A
+:1042E00088F407C02C30310549F02F30310531F00A
+:1042F00009C0803E48F0803F29F406C093FB882720
+:1043000080F9089580E0089581E00895CF93DF93C8
+:1043100000D000D01F92CDB7DEB70F900F900F9056
+:104320000F900F90DF91CF910895CF93DF9300D03E
+:1043300000D000D0CDB7DEB726960FB6F894DEBF1A
+:104340000FBECDBFDF91CF9108951F93CF93DF9321
+:10435000C091E90316E08091EA03C81799F0D0E014
+:104360001C9FF0011D9FF00D1124E551FC4F408171
+:10437000518162817381848195810E94952121966A
+:10438000C770E9CFDF91CF911F91089540911B0431
+:1043900050911C0460911D0470911E0480911F04B3
+:1043A000909120040C9495218091200482958F7027
+:1043B00009F054C080911D04882309F44FC08091F6
+:1043C000E903A091EA0360911B0470911C044091E1
+:1043D0001E0450911F04B6E08A1709F43FC090E014
+:1043E00041155105C1F17F3F11F46F3FA1F1B89F15
+:1043F000F001B99FF00D1124E551FC4F218172139A
+:104400002AC02081621327C02281211124C0238168
+:1044100034812417350710F421503109241B350B42
+:10442000283C3105C0F4209120042F702061209396
+:10443000200426E0289FF001299FF00D1124E0516F
+:10444000FC4F80818F70806180838BE194E00E94BB
+:10445000A41D0C94A52101968770BECF0895CF921C
+:10446000DF92EF92FF920F931F93CF93DF93CDB71D
+:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA
+:1044800085E0F801DE011D9601900D928A95E1F715
+:10449000D8014C9111965C91119712966C911297DC
+:1044A0001396CD90DC90149730911B0470911C04EE
+:1044B00080911E0490911F04009709F46BC17F3F07
+:1044C00019F43F3F09F466C1E0901D04EE2009F4A1
+:1044D000C0C020912004C816D90628F0F601E81BB8
+:1044E000F90BCF0104C0809590958C0D9D1DFF2484
+:1044F000F394883C910578F0F12C207F09F0C6C038
+:104500007C2DD98AC88A89890E9486218BE194E012
+:104510000E94A41DB1C0822F807F09F046C0751390
+:1045200014C0341312C0611110C02F702061209389
+:1045300020040E94C6218BE194E00E94A41D80917A
+:104540002004D80115968C932EC0CD2819F15F3F19
+:1045500011F44F3FF9F0F62E61111CC08091E90370
+:104560002091EA0336E0821709F45AC090E0389FA0
+:10457000F001399FF00D1124E551FC4F7181571363
+:1045800006C07081471303C07281711103C0019688
+:104590008770E9CFF62E662309F418C180912004B4
+:1045A000816080932004F12C11C1751308C034136D
+:1045B00006C0611104C080912004D801C3C04D879A
+:1045C0005E878D859E856A8B0E9460216A8988231B
+:1045D000E1F16623D1F120912004822F82958F7022
+:1045E00090E0029774F080911B0490911C049887CE
+:1045F0008F831986DB86CA862C87CE0107960E9498
+:10460000A41D86E0F801ABE1B4E001900D928A951B
+:10461000E1F70E94D4210E94C621FF24F394D6C062
+:104620004D875E878D859E850E949026292F229535
+:104630002F7030E0223031050CF0BCC09F7009F0C3
+:10464000B6C0805E883008F4C1C0C8010E94A41DB5
+:10465000E4CFC816D90608F453C0F601E81BF90BDD
+:10466000CF01883C910508F450C0F12C7C2DD98AEB
+:10467000C88A89890E948621EBE1F4E086E0DF01A7
+:104680001D928A95E9F70E94C621A0C0751314C037
+:10469000341312C0611110C080912004F801858389
+:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249
+:1046B0008A95E9F7FE2C8AC04D875E878D859E8599
+:1046C0006A8B0E9460216A89882309F4BECF662321
+:1046D00009F4BBCF20912004822F82958F7090E047
+:1046E00002970CF48ECF80911B0490911C049A8346
+:1046F00089831B82DD82CC822E83CE0101967FCFFF
+:10470000809590958C0D9D1DACCFF62E662309F4F7
+:104710009CCF75132EC034132CC02091200420FD93
+:104720001FC0822F82958F70D9F0D80115962C93D7
+:1047300015978F3049F08F5F982F9295907F822F39
+:104740008F70892B15968C93C8010E94A41D86E05A
+:10475000F801ABE1B4E001900D928A95E1F793CFB7
+:1047600086E0F801ABE1B4E001900D928A95E1F7A3
+:104770002DC04D875E878D859E850E9460218111A9
+:1047800040CF80912004816080932004C8010E9462
+:10479000A41D1CC0662309F458CF4D875E878D8504
+:1047A0009E850E946021882309F44FCF2ACF811172
+:1047B00048CF0CC0243031050CF047CF9F7009F46E
+:1047C00040CFF8019581907F09F03BCF8F2D629605
+:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112
+:1047E0000F91FF90EF90DF90CF9008951F93CF939C
+:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0
+:10480000CDBF4F83588769877A878B879C87CE0176
+:1048100007960E942F22882369F08F8198852A8528
+:104820003B85232BF1F19F3F09F063C08F3F09F0D7
+:1048300060C037C086E0FE013796DE011196019018
+:104840000D928A95E1F76F817885EA85FB8530972F
+:1048500041F17F3F11F46F3F21F12091EA0330E0F5
+:10486000C9010196877099274091E90350E08417A8
+:10487000950709F447C069837A83FD83EC8396E04A
+:10488000929FD001939FB00D1124A551BC4FFE0102
+:10489000319601900D929A95E1F78093EA030E9478
+:1048A000A52116E08091E9039091EA038917C1F1EF
+:1048B000189FC001112485519C4F0E942F228823EC
+:1048C00079F1E091E9031E9FF0011124E551FC4FBD
+:1048D0004081518162817381848195810E949521FB
+:1048E0008091E90390E00196877099278093E9030E
+:1048F000D9CF4F81588569857A858B859C850E94A3
+:104900009521CFCF0E945C211092EA031092E90317
+:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73
+:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE
+:104930001F910895EF92FF920F931F93CF93DF93F0
+:104940008C01009709F46CC0F12CEE24E394E8018B
+:104950002196F8018491843740F4843008F051C0E6
+:10496000813081F0823019F15BC0853709F444C091
+:10497000A8F19CE7980F903708F052C08F770E94FB
+:10498000471D41C00E5F1F4FFE01C49180E28C0F96
+:10499000883048F4C7708E2D01C0880FCA95EAF799
+:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3
+:1049B0001F4FFE01C49180E28C0F883058F4C770FD
+:1049C0008E2D01C0880FCA95EAF70E944B270E94DE
+:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8
+:1049E000FE01C491CC2381F08FE99FE00197F1F79C
+:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3
+:104A000003C00E947F1C8E018F2D882309F49FCF45
+:104A1000EFE9FFE03197F1F700C000008150F5CFDA
+:104A2000DF91CF911F910F91FF90EF90089508951E
+:104A300060932504709326048093270490932804A0
+:104A40000C9448210F931F93009125041091260484
+:104A50002091270430912804DC01CB01802B912B7D
+:104A6000A22BB32B8093250490932604A0932704B4
+:104A7000B09328041F910F910C9448210F931F931A
+:104A800000912504109126042091270430912804D8
+:104A9000DC01CB0180239123A223B323809325043F
+:104AA00090932604A0932704B09328041F910F919C
+:104AB0000C9448210F931F93009125041091260414
+:104AC0002091270430912804DC01CB018027912715
+:104AD000A227B3278093250490932604A09327044C
+:104AE000B09328041F910F910C9448211092210437
+:104AF0001092220410922304109224040C94482152
+:104B000041E050E060E070E004C0440F551F661FB4
+:104B1000771F8A95D2F74093210450932204609323
+:104B20002304709324040C94482141E050E060E099
+:104B300070E004C0440F551F661F771F8A95D2F797
+:104B40008091210490912204A0912304B091240427
+:104B5000482B592B6A2B7B2B409321045093220422
+:104B600060932304709324040C94482141E050E0A6
+:104B700060E070E004C0440F551F661F771F8A95E0
+:104B8000D2F7409550956095709580912104909151
+:104B90002204A0912304B0912404482359236A23BA
+:104BA0007B23409321045093220460932304709349
+:104BB00024040C94482141E050E060E070E004C01F
+:104BC000440F551F661F771F8A95D2F780912104E5
+:104BD00090912204A0912304B091240448275927DE
+:104BE0006A277B2740932104509322046093230477
+:104BF000709324040C9448210F931F930091210477
+:104C0000109122042091230430912404DC01CB0173
+:104C1000802B912BA22BB32B809321049093220401
+:104C2000A0932304B09324041F910F910C94482166
+:104C30000F931F93009121041091220420912304CB
+:104C400030912404DC01CB0180239123A223B323E0
+:104C50008093210490932204A0932304B09324040E
+:104C60001F910F910C9448210F931F9300912104E1
+:104C7000109122042091230430912404DC01CB0103
+:104C800080279127A227B3278093210490932204A1
+:104C9000A0932304B09324041F910F910C944821F6
+:104CA0000895CF92DF92EF92FF920F931F93CF93CD
+:104CB000DF938C01C0902504D0902604E090270457
+:104CC000F09028048091210490912204A091230463
+:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD
+:104CE000D701C6010C2E04C0B695A7959795879558
+:104CF0000A94D2F780FF06C0B8018C2F0E94D30916
+:104D0000019721F4219760F780E001C08C2FDF919B
+:104D1000CF911F910F91FF90EF90DF90CF9008956A
+:104D2000CF93DF93EC010E945126BE010E94D3096C
+:104D3000DF91CF910895CB010E9490260895909124
+:104D40008402992321F090918502911109C020914C
+:104D5000860230918702F90132969FEF40E01FC032
+:104D6000982F9695969596959F3050F5E0918602EE
+:104D7000F0918702E90FF11D877021E030E0A90171
+:104D800002C0440F551F8A95E2F7CA019181892B11
+:104D9000818308959F3F39F04F5F4E3041F051912C
+:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77
+:104DB00039F0F901E90FF11D97FDFA958283089505
+:104DC000089590918402992321F090918502911188
+:104DD00009C02091860230918702F9013296205F46
+:104DE0003F4F1FC0982F9695969596959F30F0F45B
+:104DF000E0918602F0918702E90FF11D877021E0B2
+:104E000030E0A90102C0440F551F8A95E2F7CA019C
+:104E1000809591818923818308953196E217F30764
+:104E200029F090819813F9CF1082F7CF089581E08F
+:104E300090E0E0918602F0918702E80FF91F10825E
+:104E4000019680319105A9F7089590913C04892B32
+:104E500080933C040895809590913C04892380932D
+:104E60003C04089510923C04089590913B04892BD2
+:104E700080933B040895809590913B04892380930F
+:104E80003B04089510923B04089590913A04892BB5
+:104E900080933A040895809590913A0489238093F1
+:104EA0003A04089510923A040895809329040895CD
+:104EB0001092290408958091860290918702FC0146
+:104EC00031969C01205F3F4F80E0919191118F5F5F
+:104ED000E217F307D1F70895E0918602F091870277
+:104EE00080913C048083E0918602F091870290815A
+:104EF00080913B04892B8083E0918602F0918702A8
+:104F0000908180913A04892B8083809129048823A1
+:104F100061F0E0918602F09187029081892B808375
+:104F20000E945B2781111092290480918602909142
+:104F300087020C944B1B80915E04843039F11092EF
+:104F40003E0420E488E190E00FB6F894A8958093A1
+:104F500060000FBE2093600080E00E94300580E07A
+:104F60000E94AE0A83B7817F846083BF83B781606C
+:104F700083BF7894889583B78E7F83BF88E10FB60F
+:104F8000F89480936000109260000FBE0895089519
+:104F90000895CF9380E00E9430050E94C7270E94A9
+:104FA000650C0E94C827C0E08C2F0E94AE0D892B93
+:104FB00029F4CF5FC430C1F780E001C081E0CF9118
+:104FC00008950E945C2180E00E9430050E94562DC9
+:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5
+:104FE00011248F939F93AF93BF9380913E048111BF
+:104FF00013C080913F0490914004A0914104B0916E
+:1050000042044196A11DB11D80933F04909340043A
+:10501000A0934104B0934204BF91AF919F918F91AF
+:105020000F900FBE0F901F90189582E084BD93E003
+:1050300095BD9AEF97BD80936E0008952FB7F894B1
+:1050400080913F0490914004A0914104B0914204AA
+:105050002FBF0895CF92DF92EF92FF920F931F938D
+:105060002FB7F89440913F0450914004609141045F
+:10507000709142042FBF6A017B01EE24FF248C0152
+:1050800020E030E0C016D106E206F30610F44150ED
+:1050900051099A01281B390BC9011F910F91FF90EB
+:1050A000EF90DF90CF9008951F920F920FB60F925E
+:1050B00011248F939F93AF93BF9380913F0490915E
+:1050C0004004A0914104B09142040196A11DB11D7C
+:1050D00080933F0490934004A0934104B093420412
+:1050E000BF91AF919F918F910F900FBE0F901F9026
+:1050F00018950E943C18F8942FEF87EA91E621500A
+:1051000080409040E1F700C0000087E090EBDC01B8
+:105110008093690490936A04A0936B04B0936C0429
+:105120009CE088E10FB6F894A895809360000FBECC
+:1051300090936000FFCF0E94DA28811102C00E9484
+:10514000B6280E94E52880933D040E94F2288093AF
+:10515000670487FB882780F9809385020E94E928ED
+:10516000682F70E080E090E00C9418256DEE7EEFE3
+:1051700080E090E00E94093260E082E090E00E94CE
+:10518000F73160E083E090E00E94F73160E084E076
+:1051900090E00E94F73160E085E090E00E94F731F6
+:1051A00060E086E090E00E94F7316FEF87E090E0EA
+:1051B0000C94F73180E090E00E94F13121E08D3EC7
+:1051C0009E4F09F020E0822F089582E090E00C9439
+:1051D000E93183E090E00C94E931682F83E090E0BE
+:1051E0000C94F73184E090E00C94E931682F84E06E
+:1051F00090E00C94F73186E090E00C94E931682F50
+:1052000086E090E00C94F73187E090E00C94E9316F
+:10521000682F87E090E00C94F7318091450480FF7F
+:105220000BC060918B0285E0689FB00111247595D9
+:105230006795759567952BC081FF09C060918B02BA
+:1052400085E0689FB00111247595679520C082FFA5
+:1052500007C060918B0285E0689FB001112417C0E0
+:10526000909146049923D1F060918A02961788F7AD
+:1052700020918B0285E0289F90011124929FA0012C
+:10528000939F500D112470E0CA010E94CF31603805
+:10529000710540F46115710539F002C065E070E0F8
+:1052A000862F08958FE7089581E008958091450441
+:1052B00080FF08C06091890270E0759567957595CB
+:1052C000679521C081FF06C06091890270E07595E5
+:1052D000679519C082FF04C06091890270E010C018
+:1052E000909146049923C1F0609188029617A0F727
+:1052F00080918902899FC001112470E00E94CF3102
+:105300006038710528F46115710521F0862F089524
+:105310008FE7089581E0089561E070E0F4CF803F69
+:1053200021F40E940D29819504C0813F29F40E9437
+:105330000D29809349040895823F21F40E940D298C
+:10534000819504C0833F29F40E940D29809348046D
+:105350000895893F19F40E94562905C08A3F31F407
+:105360000E945629819580934A0408958B3F21F429
+:105370000E945629819504C08C3F29F40E94562929
+:1053800080934B040895843F21F480914704816009
+:1053900017C0853F21F480914704826011C0863F89
+:1053A00021F48091470484600BC0873F21F48091F1
+:1053B0004704886005C0883F31F4809147048061CC
+:1053C0008093470408958D3F21F4809145048160C6
+:1053D0000BC08E3F21F480914504826005C08F3F51
+:1053E00029F4809145048460809345040895803FAA
+:1053F00039F48091490487FF6CC01092490469C058
+:10540000813F29F4809149041816BCF362C0909141
+:105410004804823F29F497FF5CC01092480459C0A9
+:10542000833F19F41916CCF354C0893F41F480919D
+:105430004A0418160CF04DC010924A044AC08A3F24
+:1054400029F480914A0487FF44C0F6CF8B3F39F49A
+:1054500080914B0487FF3DC010924B043AC08C3FB3
+:1054600029F480914B041816BCF333C0843F21F417
+:10547000809147048E7F17C0853F21F480914704B7
+:105480008D7F11C0863F21F4809147048B7F0BC034
+:10549000873F21F480914704877F05C0883F31F41E
+:1054A000809147048F7E8093470413C08D3F21F481
+:1054B000809145048E7F0BC08E3F21F4809145047E
+:1054C0008D7F05C08F3F29F4809145048B7F8093A9
+:1054D00045048091480481110EC0809149048111D6
+:1054E0000AC080914A04811106C080914B04811149
+:1054F00002C010924604089587E494E00E94561B6F
+:105500000E941E28909344048093430408951F939F
+:10551000CF93DF9380914304909144040E942A2802
+:10552000AC0190914604992321F020918C0230E047
+:1055300006C020918D028AE0289F90011124421715
+:10554000530708F486C080914804C0914904D09163
+:105550004A0410914B04811107C0C11176C0D111CA
+:1055600074C0111172C075C09F3F19F09F5F909376
+:105570004604181624F40E940D2980934804809153
+:10558000480487FF05C00E940D2981958093480437
+:105590001C1624F40E940D2980934904809149042B
+:1055A00087FF05C00E940D29819580934904609171
+:1055B0004804662339F1C0914904CC2319F17727B7
+:1055C00067FD7095872F972F0E94F12E23E333E319
+:1055D00043E35FE30E9401300E94BE2E60934804C3
+:1055E0006C2F772767FD7095872F972F0E94F12EDC
+:1055F00023E333E343E35FE30E9401300E94BE2EC6
+:10560000609349041D1624F40E94562980934A048D
+:1056100080914A0487FF05C00E9456298195809396
+:105620004A04111624F40E94562980934B04809159
+:105630004B0487FF05C00E945629819580934B0437
+:10564000DF91CF911F910C947C2A9F3F09F08ECF60
+:1056500096CFDF91CF911F910895E7E4F4E085E0C4
+:10566000DF011D928A95E9F71092460410924504D5
+:105670000895833081F128F4813059F08230D1F0DF
+:105680000895853009F449C0B8F1863009F456C050
+:10569000089580918D02262F30E0280F311D2F3F75
+:1056A000310524F4680F60938D0208958FEF809385
+:1056B0008D02089580918C02262F30E0280F311D35
+:1056C0002F3F310524F4680F60938C0208958FEF0B
+:1056D00080938C02089580918B02262F30E0280F52
+:1056E000311D2F3F310524F4680F60938B0208951C
+:1056F0008FEF80938B02089580918A02262F30E0ED
+:10570000280F311D2F3F310524F4680F60938A0262
+:1057100008958FEF80938A02089580918902262F41
+:1057200030E0280F311D2F3F310524F4680F6093BE
+:10573000890208958FEF80938902089580918802ED
+:10574000262F30E0280F311D2F3F310524F4680F3C
+:105750006093880208958FEF8093880208958330C4
+:1057600011F128F4813049F0823091F008958530AC
+:1057700081F120F18630C1F1089580918D02681782
+:1057800020F4861B80938D02089510928D02089557
+:1057900080918C02681720F4861B80938C020895F8
+:1057A00010928C02089580918B02681720F4861B5A
+:1057B00080938B02089510928B02089580918A0243
+:1057C000681720F4861B80938A02089510928A023B
+:1057D000089580918902681720F4861B80938902BE
+:1057E000089510928902089580918802681720F424
+:1057F000861B8093880208951092880208950F9363
+:105800001F93873208F048C08E3108F094C0803171
+:1058100009F47EC008F5873009F468C068F4863062
+:1058200009F0A4C080913D04817F8E7F80933D0468
+:1058300081E080934D049BC08B3009F490C08E3082
+:1058400009F094C080913D0482FB222720F991E069
+:10585000922790FB82F965C0863109F480C060F41C
+:10586000813109F083C00E945C219091850281E022
+:1058700089278093850273C0893109F470C08B3108
+:1058800009F074C080913D0481FB222720F991E04A
+:10589000922790FB81F945C0883309F460C050F429
+:1058A000893209F45EC0853309F45BC0873209F49C
+:1058B00058C05CC0833409F454C028F48A3308F417
+:1058C00055C0895339C0883409F050C00E945C210A
+:1058D0000E946C060FEF13ED20E3015010402040B2
+:1058E000E1F700C000000E94792839C090913D0482
+:1058F000892F8095817080FB90F929F096609860DF
+:1059000090933D0434C0997F977F90933D0427C0C6
+:1059100080913D0483FB222720F991E0922790FBA0
+:1059200083F980933D049923D1F080913D048160F7
+:1059300080933D0414C08D5141E050E060E070E080
+:105940008A019B0104C0000F111F221F331F8A957B
+:10595000D2F7C901B8010E9418250E945C2181E09C
+:1059600006C061E070E080E090E0F5CF80E01F913C
+:105970000F91089580E0089580E00895CF93C82F97
+:1059800080914D04813069F018F08230C9F184C0F3
+:10599000E0918602F09187028081823209F07EC018
+:1059A00007C0E0918602F09187028081823261F423
+:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7
+:1059C0001DC081E090E01AC08C2F0E94BC2C811178
+:1059D00014C0C43179F048F4CB3079F0C03109F00B
+:1059E00061C082E080934D0408C0C93219F0C83309
+:1059F00021F058C010924D0455C081E0817054C010
+:105A0000C93291F120F5C43179F1B0F4C73009F011
+:105A100047C08EE180938D0282E380938C028AE0FE
+:105A200080938B0284E180938A0288E080938902CC
+:105A300088E28093880234C0CE51C63088F5EC2FBE
+:105A4000F0E0E85AFC4F808180934C0429C0CE34AA
+:105A5000E9F020F4CB3421F56AE013C0C13579F0C8
+:105A6000C235F1F461E00DC080914C04882319F037
+:105A700010924C0415C081E080934D0415C061E084
+:105A800006C080914C040E94392B0AC06AE08091C4
+:105A90004C040E94AF2B04C010924D0480E004C05F
+:105AA00081E002C080E0AACFCF9108950E94DA2859
+:105AB000811102C00E94B6280E94FB2880936804CE
+:105AC00080FF02C0869501C080E00C943005809173
+:105AD0006804982F9695292F30E0233031054CF437
+:105AE0009F5F990F8170892B8160809368040E9469
+:105AF000FF288091680486950C9430058091680495
+:105B0000982F969591F09158990F8170892B8093D9
+:105B100068048E7F91E009F490E08091680490FB26
+:105B200080F9809368040E94FF288091680486951C
+:105B30000C94300580916804982F909590FB80F923
+:105B4000809368040E94FF288091680480FF02C04F
+:105B5000869501C080E00C94300590916804892FEF
+:105B600086958F5F8F779170843028F4880F892B0A
+:105B70008093680402C090936804809168048E7FCB
+:105B800091E009F490E08091680490FB80F98093A3
+:105B900068040E94FF288091680486950C94300563
+:105BA00020916804922F96958927982F990F822F1C
+:105BB0008170892B809368048E7F91E009F490E0D6
+:105BC0008091680490FB80F9809368040E94FF280C
+:105BD0008091680486950C9430055058BB27AA27FD
+:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7
+:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45
+:105C0000D3D180F3BA17620773078407950718F09A
+:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A
+:105C20000B01B90190010C01CA01A0011124FF2749
+:105C3000591B99F0593F50F4503E68F11A16F04044
+:105C4000A22F232F342F4427585FF3CF4695379543
+:105C50002795A795F0405395C9F77EF41F16BA0B08
+:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6
+:105C7000661F771F881FC2F70EC0BA0F621F731FFF
+:105C8000841F48F4879577956795B795F7959E3F5C
+:105C900008F0B3CF9395880F08F09927EE0F9795EA
+:105CA0008795089527D108F481E008950CD06BC141
+:105CB00063D140F05AD130F021F45F3F19F03EC17A
+:105CC000511195C14FC170D198F39923C9F3552350
+:105CD000B1F3951B550BBB27AA27621773078407DF
+:105CE00038F09F5F5F4F220F331F441FAA1FA9F395
+:105CF00033D00E2E3AF0E0E830D091505040E69587
+:105D0000001CCAF729D0FE2F27D0660F771F881FE7
+:105D1000BB1F261737074807AB07B0E809F0BB0BD6
+:105D2000802DBF01FF2793585F4F2AF09E3F5105FA
+:105D300068F004C15CC15F3FECF3983EDCF38695EC
+:105D400077956795B795F7959F5FC9F7880F911D70
+:105D50009695879597F90895E1E0660F771F881F5C
+:105D6000BB1F621773078407BA0720F0621B730B0F
+:105D7000840BBA0BEE1F88F7E095089504D0689461
+:105D8000B11135C1089518D188F09F5790F0B92FFF
+:105D90009927B751A0F0D1F0660F771F881F991F80
+:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035
+:105DB00008951CC1672F782F8827B85F39F0B93F45
+:105DC000CCF3869577956795B395D9F73EF4909582
+:105DD0008095709561957F4F8F4F9F4F0895E89400
+:105DE00009C097FB3EF490958095709561957F4F23
+:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1
+:105E0000F695879577956795B795F111F8CFFAF4E0
+:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11
+:105E200016C0882311F096E911C0772321F09EE86F
+:105E3000872F762F05C0662371F096E8862F70E0D5
+:105E400060E02AF09A95660F771F881FDAF7880FAF
+:105E50009695879597F9089588D018F011F08CD011
+:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4
+:105E7000E7FB6217730784079507A8F199F3E92FE9
+:105E8000FF2788232AF03197660F771F881FDAF7DC
+:105E9000952F5527442332F091505040220F331F45
+:105EA000441FD2F7BB27E91BF50B621B730B840B56
+:105EB000B109C1F222F4620F731F841FB11D319723
+:105EC0002AF0660F771F881FBB1FEFCF91505040FD
+:105ED0005AF041F0882332F0660F771F881F9150E7
+:105EE0005040C1F7939530C08695779567959F5F31
+:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D
+:105F000016161706E807F907C0F012161306E4077D
+:105F1000F50798F0621B730B840B950B39F40A2676
+:105F200061F0232B242B252B21F408950A2609F454
+:105F3000A140A6958FEF811D811D089597F99F6758
+:105F400080E870E060E008959F3F31F0915020F4C8
+:105F5000879577956795B795880F911D9695879545
+:105F600097F908959FEF80EC089500240A9416167F
+:105F7000170618060906089500240A941216130637
+:105F8000140605060895092E0394000C11F48823C5
+:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1
+:105FA0007F4F8F4F9F4F089557FD9058440F551FB7
+:105FB00059F05F3F71F04795880F97FB991F61F08B
+:105FC0009F3F79F087950895121613061406551F02
+:105FD000F2CF4695F1DF08C0161617061806991F6E
+:105FE000F1CF86957105610508940895E894BB2763
+:105FF00066277727CB0197F908957CDF08F48FEFA8
+:1060000008950BD0C0CFB1DF28F0B6DF18F095238C
+:1060100009F094CFA7CF1124EACFC6DFA0F3959F54
+:10602000D1F3950F50E0551F629FF001729FBB277F
+:10603000F00DB11D639FAA27F00DB11DAA1F649F2B
+:106040006627B00DA11D661F829F2227B00DA11DDE
+:10605000621F739FB00DA11D621F839FA00D611D64
+:10606000221F749F3327A00D611D231F849F600D85
+:10607000211D822F762F6A2F11249F5750408AF0BE
+:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A
+:10609000881F91505040A9F79E3F510570F04ECF98
+:1060A000A6CF5F3FECF3983EDCF386957795679536
+:1060B000B795F795E7959F5FC1F7FE2B880F911D68
+:1060C0009695879597F90895FA01EE0FFF1F309680
+:1060D0002105310599F16115710561F48038BFE33F
+:1060E0009B0749F168949038810561F08038BFEFD3
+:1060F0009B0741F0992342F5FF3FE105310521055A
+:1061000011F1E8940894E795D901AA2329F4AB2F5B
+:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4
+:10612000F73950F019F0FF3A38F49F779F930CD06D
+:106130000F9007FC905808953EF014CF60E070E097
+:1061400080E89FE308954FE79F775F934F933F93D6
+:106150002F939ED02F913F914F915F9152DF05C0B9
+:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801
+:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1
+:106180004EDF0F920F920F924DB75EB70F92C0D0B5
+:10619000ECEFF0E016D04F915F91EF91FF91E59514
+:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23
+:1061B000FA95E1F74195550B32D00F9007FE26C0B6
+:1061C0000895DF93CF931F930F93FF92EF92DF9287
+:1061D0007B018C01689405C0DA2EEF011EDFFE0101
+:1061E000E894A5912591359145915591AEF3EF0134
+:1061F00006DDFE019701A801DA9479F7DF90EF90B0
+:10620000FF900F911F91CF91DF9108959B01AC01F9
+:1062100060E070E080E89FE349CD90CE95CECCDE83
+:10622000E8F39923D9F3940F511DBBF391505040DB
+:1062300094F059F0882332F0660F771F881F915031
+:106240005040C1F79E3F510544F7880F911D969528
+:10625000879597F908955F3FACF0983E9CF0BB2777
+:10626000869577956795B79508F4B1609395C1F7D2
+:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70
+:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67
+:1062900093DEC8F39923D1F3C6F3DF93CF931F9313
+:1062A0000F93FF92C92FDD2788232AF02197660FCD
+:1062B000771F881FDAF720E030E040E85FEB9FE3CC
+:1062C000883920F0803E30F021968F7787DCE4E239
+:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197
+:1062E000EC01FB2E6F5771097595771F880B990B81
+:1062F00078DD28E132E741E35FE38FDEAF2D9801DF
+:10630000AE01FF900F911F91CF91DF9178DC3BCED2
+:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497
+:1063200022273327442750781FC0B75188F4AB2F5A
+:106330000024469537952795011CA395D2F300209C
+:1063400069F0220F331F441FB395DAF30DD045CC0B
+:1063500061307105A0E88A07B94630F49B01AC01B1
+:106360006627772788279078309621F0208331831D
+:10637000428353830895AA1BBB1B51E107C0AA1F88
+:10638000BB1FA617B70710F0A61BB70B881F991FD6
+:106390005A95A9F780959095BC01CD01089597FB7A
+:1063A000072E16F4009407D077FD09D00E94BB3168
+:1063B00007FC05D03EF4909581959F4F0895709508
+:1063C00061957F4F0895EE0FFF1F0590F491E02D2A
+:1063D0000994F999FECF92BD81BDF89A992780B5AD
+:1063E0000895A8E1B0E042E050E00C941132262F6D
+:1063F000F999FECF92BD81BDF89A019700B40216BB
+:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68
+:1064100008950196272F0E94F8310C94F731DC0182
+:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F
+:10643000319600B40D9241505040B8F70895F89449
+:02644000FFCF8C
+:106442000C52D02445000000410000DC4400000052
+:106452004152D0A4440000404100005C44000000CE
+:106462004148F17644000000415C978A44000000F4
+:10647200411FD592440000004152D0A444000000C4
+:10648200415CFFB844000000410AA7CF440000006D
+:10649200410000DC44000000410AA7CF4400000094
+:1064A200410000DC440000004100000000000080C8
+:1064B2004000005C450000404100000000000080F8
+:1064C2004052D02445000040410AA7CF44000000BA
+:1064D200410000DC44000000410000000000008098
+:1064E2004052D024450000404100000000000080DE
+:1064F2004000005C45000040410AA7CF4400000074
+:10650200410000DC44000000410000000000008067
+:106512004052D024450000404100000000000080AD
+:10652200400AA74F45000040410AA7CF440000009F
+:10653200410000DC44000000410000000000008037
+:106542004052D024450000004100000000000080BD
+:10655200405CFF3845000000410000000000008060
+:106562004052D02445000000410AA7CF4400000059
+:10657200410000DC440000004100000000000080F7
+:106582004052D024450000804153D02445000040B1
+:106592004160970A450000004154D0A44400000025
+:1065A200410000DC440000004160970A450000A061
+:1065B20041050000003F0000C8424314D114AE144C
+:1065C2007A14461401012A042808140A321E000013
+:1065D200020004000500070009000B000C000E0079
+:1065E2001000110013001500170018001A001C00FB
+:1065F2001D001F002100230024002600280029007E
+:106602002B002D002F0030003200340035003700FF
+:1066120039003B0040004500250026006100600073
+:1066220020003700640065006600670044004600F1
+:10663200240047003149803F5D8B803FF8BF803F97
+:10664200CAE1803F73ED803FCAE1803FF8BF803FDF
+:106652005D8B803F3149803F0000803FF16D7F3F7D
+:1066620075EA7E3F4C827E3F833F7E3F84287E3F99
+:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6
+:106682000000803F3F4D363975092809F208B908E4
+:106692004C0865087E0897080102030405060708EE
+:0266A2000900ED
+:00000001FF
diff --git a/keyboard/planck/planck_pcb_r4_w_bootloader.hex b/keyboard/planck/planck_pcb_r4_w_bootloader.hex
new file mode 100644
index 0000000000..140bf415f2
--- /dev/null
+++ b/keyboard/planck/planck_pcb_r4_w_bootloader.hex
@@ -0,0 +1,1897 @@
+:020000020000FC
+:047000000C948D3E21
+:047028000C94B73DD0
+:10702F0012010002FF010020EB03F42F0000010208
+:10703F00030109021200010100803209040000005F
+:10704F00000000000C03410054004D0045004C00AF
+:10705F001603410054006D00330032005500340018
+:10706F004400460055000C0331002E0030002E0066
+:10707F0030000403090416010C0100000C0000018C
+:02708F006C7F14
+:1070920012BD01BDF89A00B5089501E00895F9996D
+:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929
+:1070B200FECF0C944938F80104910895F8013491F7
+:1070C20031962491890108950091610000930C0189
+:1070D20000E80093610001E00093610005BF02E057
+:1070E20005BF0C9486380091D70001600093D70049
+:1070F200A89507EF04BF0091600000610093600053
+:1071020000E00093600001E008950E94AA3D0E9401
+:10711200B53DFDCF0CD00F7708D0006806D00061D6
+:1071220004D0016028D0789408950093D80000918B
+:10713200D8000895FCDF00621ED04CD009B500FFD4
+:10714200FDCFF5DF0F7D17D00091E0000E7F009399
+:10715200E0000091E000077F0093E0000091E20070
+:1071620001600093E2000091E20008600093E200F7
+:1071720078940C94743B0093D800089500910D010B
+:10718200002359F40091D90000FF07C0D0DF006846
+:10719200F2DF01E000930D01CDDFE0E2F2E00081D9
+:1071A200018100FF0DC0008111811E7F11830083C8
+:1071B20001E00093EA0000E00093EA0000931E025F
+:1071C20000E00093E9000091E80003FF02C00E9482
+:1071D200F23B0895A89539D000E40093600000E0E6
+:1071E200009381000093800010E0009385000093DB
+:1071F200840001E006BB00918100036000938100DE
+:107202000091600007FFFCCF00E80093600010933C
+:107212008100A89507EF04BF18D010936000209159
+:1072220084003091850010938100109380001093A8
+:1072320085001093840001E006BB2D3D354010F01F
+:1072420002E101C002E009BD089500916000006101
+:107252000093600008950E94AD3E239741D100E063
+:1072620000930901B5D104811581012B51F437D165
+:1072720000910701002309F4B9C000E0009307015F
+:10728200B5C058D102FFFDCF37D1068335D1009367
+:107292000F0132D1009310012FD1009311012CD193
+:1072A2000093120129D10093130102852091130149
+:1072B20030911201409111015091100116811A95DD
+:1072C20041F01250A9F01A9599F11A9509F473C078
+:1072D2008BC010910F01113011F411E001C010E0C8
+:1072E200138799D00C3F11F414D17FC077D17DC0A0
+:1072F20092D010910F01112329F01A9549F01A9595
+:10730200A9F073C010E013870C3F09F06EC0ECCFF8
+:1073120056D103C04CD109F468C00D911C9144D1DF
+:107322000F3FC1F305E0009309015FC011E0EBCF0D
+:10733200D2D029F00250E1F10A9541F056C0FDD0B9
+:107342000E94A33F0FEF00930A014FC0552319F08B
+:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE
+:1073620003FFFDCF67D051D04AD008E00093600000
+:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F
+:1073820044D00FEF1FE004C009811A810150104060
+:1073920009831A8309811A81012BB1F700E800934E
+:1073A200610000910C01009361000C940000FFCF7A
+:1073B20001E003871AC08FD019F00A9539F015C081
+:1073C200535098F4BAD002E000870FC0505339F0FE
+:1073D2005A9541F05F52B1F35A95A1F306C002E00B
+:1073E2000883F0CF01E0FCCFA8D079D02396E4E067
+:1073F2000C94BA3E01E005BF00E005BF089500917C
+:10740200D8000F770093D800089509B50D7F09BD04
+:1074120000E009BD08955183408333832283109194
+:10742200E8001B7F1093E8001091E8001F7710938B
+:10743200E80008955DD053D0F8940091E000016017
+:107442000093E000089579D04AC0219749D0009175
+:107452000601035019F00250B9F00BC03CD021F0E4
+:107462000A9559F00A9529F400910A010C3F19F482
+:1074720050D02196089567D0FCCF0091010100936E
+:10748200F100009100010AC01091100124D019F0FE
+:107492000A9549F0EECF135018F400E00093F10082
+:1074A2001ED044D0E6CF105339F01A9539F01F524E
+:1074B20041F01A9541F0F4CF08E5F0CF00E006D094
+:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5
+:1074D20030E00C94113F00910F010023089521C068
+:1074E2000BD008D007D00093040106D00093050109
+:1074F20021D00BC000D008830091F10008950091C3
+:10750200EB0000620093EB0015D0077F0093E800C8
+:107512000895F5DF02E00093080103E000930901FA
+:10752200089559D007D000FFFDCF089503D002FF80
+:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A
+:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD
+:107552002BD00093F1002BD059F43DD0082F092BEA
+:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1
+:10757200042D4394003289F300910B0100230D91F5
+:107582001C9131F311970E945838E3CFD3DF00FFEB
+:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B
+:1075A200CCDFE5E00C94B93E11970C945C380D9158
+:1075B2001C910F5F1F4F1C930E93019708958281B8
+:1075C200938100811181801B910B0196DF01089547
+:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71
+:1075E200F7DF80819181A081B181AF710481158122
+:1075F20000521040048315830AC000910B0100233E
+:1076020031F4A301920103E911E00E943B3F47D00C
+:10761200B8F1662477242C0111C06EDFF301ED5618
+:10762200FE4F008301E0600E00E0701E01960091A3
+:10763200F200002311F033D0B8F47FDF30D0E8F24B
+:10764200F301B096E238F040C0F674DF02FFFDCFDE
+:107652000091F200BDDF24813581201B304024835C
+:107662003583E5CF49DFAA95AA23E1F700910B0103
+:10767200013099F62091F1008C010E945038D6CF4A
+:1076820004811581012B21F055DF02FFFDCF55DF6B
+:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051
+:1076A200F1E0028113810817190708952091EB0078
+:1076B20021602093EB000093EC000091ED0002703A
+:1076C200012B0093ED000091ED0002600093ED00AC
+:1076D2001091EE00012F000F00E0001F0895412FCE
+:1076E2000093E900089500E009D000FD05C000E024
+:1076F200F7DF10E202E0DACF00E00895F1DF009157
+:10770200EB0008950F770132A9F5112369F11A955B
+:1077120059F01A9561F01A9569F01A95F9F01A95CF
+:10772200C1F01A95D9F024C00E942C3920C00E94C1
+:10773200263A1DC029D00091090123D001E01FD0B3
+:1077420020D0009108011BD00E94923A0E94973AE1
+:107752000EC01AD00091080114D007C002E00093B5
+:10776200080100E0009309010FD00E94923A03C081
+:107772000E94803A02C001E0089500E0089501D01D
+:1077820000E00093F10008950091E800077F009364
+:10779200E800089508950350F9F4112339F01A9579
+:1077A20051F01A9581F01A9599F016C004E016D09E
+:1077B20001E810E703C011D003E510E7E7E1F2E0CA
+:1077C20000831183D8CF06E109D00FE510E7F6CF89
+:1077D20004D005E710E7F2CFD0CF0CE000931A02F5
+:1077E200089527D120D100931D02E1D0212F11232A
+:1077F20029F12A95E9F02250F1F0225099F02A95C8
+:1078020049F0225061F02A9581F02A95E1F02A95FB
+:10781200E9F023C0003809F44FC00C94833B0038D0
+:10782200E1F7C8C00023C9F71EC00023B1F72DC07D
+:10783200033098F744C1033080F70BC1003868F376
+:10784200033858F7C9C0013841F77BC1013051F400
+:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA
+:1078620009F41ED008951091E3001078DCD00F7750
+:10787200012B0093E300E9D0ACD000FFFDCF0091D3
+:10788200E30000680093E300089591D0123040F4C1
+:107892000FD010931E02DAD000911E020C94CB3B43
+:1078A2000091EB0001D004C000620093EB00089548
+:1078B2000091E800077FC0C0BA93AA93229700E024
+:1078C2000093190274D0AFD0202F2A9519F02A956F
+:1078D200E9F022C002E100931A020FE210E7E7E1A9
+:1078E200F2E0008311839DD008839DD00983E0DFFD
+:1078F20000911A0210E02881398102171307A8F4B7
+:107902000F7181F401E00093190211C002E10093AA
+:107912001A0201E410E7E3CF0E94CC3B002319F7DF
+:107922008ED040C01093190202C020931A027ED05A
+:10793200A7E1B2E001C08AD000911A02002309F146
+:1079420048D004FD1EC045D000FD03C042D004FF54
+:10795200FACF10E0012F1395003281F0ED91FC91E6
+:107962001197049133D02D913C912F5F3F4F3C935F
+:107972002E93FD0103810A95038361F72AD004FF48
+:10798200DACF00911902013039F423D004FD04C08A
+:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F
+:1079A20018D00B7F49D02296A991B99108951091D0
+:1079B200F10008957DDF00911E0208D047D009D062
+:1079C2000F773AD006D002FFFDCFBFC00093F1007F
+:1079D20008950091E800089524D010911D021058D6
+:1079E20029F01A9589F01A9591F019C061DF00917A
+:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63
+:107A020018D0E7DF0F770CC053DF00E0F2CF51D080
+:107A12000F7710E0F801E55EFD4F0081EACF0FD04D
+:107A22000BC001D000D00091F1000895D2DF0F7E8B
+:107A320003C00091E8000B7F0093E80008950091D5
+:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31
+:107A5200F3CF00911D02002329F00A9509F10A953E
+:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE
+:107A7200B9F4D9DF0F7711F416D01BD00093E900C7
+:107A82001091EB0010FF0BC00ED010E01093E90034
+:107A920021E0F801E55EFD4F20834FD003C042D0C4
+:107AA20045D0CFDFC9CF1091EB0010621093EB00ED
+:107AB20008951091E800177F1093E800089500914F
+:107AC2001D02002311F4AFDF02C0013011F4B7DF51
+:107AD200B3CF023031F52DD019F52091F1002F7777
+:107AE2002093E90023D000FF19C081F01FD000616C
+:107AF200DCDE01E010E0422F0E949F3E0093EA008C
+:107B020000E00093EA0012D00860CFDE0BD030E034
+:107B1200F901E55EFD4F008310D0DACF03D0D7CF55
+:107B2200BFDE089500E00093E90008950091EB00A4
+:107B3200089579DF3CDF00230895BADE4ADF0E7F25
+:107B4200089583DF46DF02FFFDCF73DF42DF0F7749
+:107B520073CF0091D70001600093D7000E948B3849
+:107B620000E000931F0208950C94BF388A93FA93A1
+:107B7200EA933A922A921A920A927A936A935A93BF
+:107B82004A933A932A931A930A938FB70091DA0091
+:107B920000FF24C00091D80000FF20C00EEF009328
+:107BA200DA000091D90000FF11C001E000930D013D
+:107BB200ABD0026096D09AD00860A2D00E949B38C7
+:107BC2000091E0000E7F0093E00008C000E0009307
+:107BD2000D0100931E0298D0046083D07FD002FF73
+:107BE20005C084D002FF02C00BEF75D077D000FF32
+:107BF2001BC07CD000FF18C001E000930E016AD0C8
+:107C020083D000626ED00EEF6FD0006179D06ED05B
+:107C12000F7D76D00091D80000620093D80009B59C
+:107C22000D7F09BD00E009BD59D004FF20C05ED020
+:107C320004FF1DC009B500FD05C00E94EB3809B55F
+:107C420000FFFDCF0091D8000F7D0093D80042D0F5
+:107C520000910E01002359F04CD00FEE45D00F7E5B
+:107C620052D000643ED042D001604AD042D036D0D9
+:107C720005FF0FC03BD005FF0CC000E000930E01D2
+:107C820035D00F7E3DD00FED2FD00F7D3CD0006858
+:107C920028D024D003FF0DC029D003FF0AC000E082
+:107CA20000931F0207EF17D00E94743B2DD0116082
+:107CB20018D08FBF09911991299139914991599100
+:107CC200699179910990199029903990E991F991E6
+:107CD200899118950FEE0093E10008950091E1005B
+:107CE20008951183008308950093E1000091E2005A
+:107CF20008950091E200006203D00091E200086062
+:107D02000093E2000895FCDFE0E2F2E000811181DD
+:107D1200089500008895FECF01E60DBF02E00EBF78
+:107D2200C2EED2E00E947438002311F00E94D33ECA
+:107D32000E9465380E948A3E0C948A3E4A951AF047
+:107D4200000F111FFBCF0895BA92AA929A928A92BB
+:107D52007A926A925A924A92BA93AA939A938A937D
+:107D62000895BB84AA84998488847F806E805D8014
+:107D72004C80BB81AA8199818881F0E00FB6F8948A
+:107D8200CE0FDF1F0FBE089520E006D0E9F7089559
+:107D9200259102D0E9F708952D9301501040202F2C
+:107DA200212B089585E890E7FC0105911491FC01CF
+:107DB2003296A591B491FC01349625913491422FCB
+:107DC200432B19F0F901E4DF01C0DEDF069610E76C
+:107DD2008139910748F308952F930CD02F9101D048
+:107DE20008953CD0F12FE02F45E047BFE89536D00B
+:107DF20012D0089533D0F12FE02F43E047BFE8952A
+:107E02002DD008952BD0F12FE02F43E047BFE89506
+:107E120025D001D0089522D041E147BFE8951EC088
+:107E22001DD0F12FE02F41E247BFC895002D16C0AB
+:107E320015D0F12FE02F49E047BFC895002D0EC0A5
+:107E4200F32FE22F012E102E41E047BFE89506C026
+:107E520005D0002E29E027BFE89500C0022E27B7E3
+:107E620020FDFCCF202D0895022E27B726FDFCCF42
+:107E7200202D08950E94A53E22974801C901DA01EA
+:107E820010C05BD001E0A00E00E0B01E00E4A0161E
+:107E920000E0B00608F440C0830120E030E00E9418
+:107EA200F23E0A2F0B2B09F440C0082F0F7710E087
+:107EB2002C01401A510A320100E4A02E03C00A2FFD
+:107EC2000B2BE1F04816590680F0F40101914F01A5
+:107ED2000983119729F001914F010883119711C06D
+:107EE200F2013196049108830CC0F20104910983D6
+:107EF2003196E817F907A1F7F401EDCF1BD00883FB
+:107F020019839201088119810E94213F16D0AA94F7
+:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE
+:107F220009F4AFCF83011DD0B7CF01E02296ECE078
+:107F32000C94B23E82010C945F3802E0400E00E0E5
+:107F4200501E08959A938A9380E090E08C0109D0A4
+:107F520080589F4F8F3F0FE69007C0F38991999108
+:107F6200089520E030E00C94FB3E00000000000089
+:067F720000000000FC000D
+:107FE4000C94ED3E0C94113F0C94193F0C94213FDA
+:0C7FF4000C94F23E0C94033F0C94293FC7
+:040000030000700089
+:100000000C94DA040C941E050C941E050C941E0529
+:100010000C941E050C941E050C941E050C941E05D4
+:100020000C941E050C941E050C94B7180C94891999
+:100030000C94EC270C941E050C941E050C941E05C4
+:100040000C941E050C941E050C941E050C941E05A4
+:100050000C941E050C9454280C941E050C941E053B
+:100060000C941E050C941E050C941E050C941E0584
+:100070000C941E050C941E050C941E050C941E0574
+:100080000C94AD0E0C941E050C941E050C941E05CC
+:100090000C941E050C941E050C941E050C941E0554
+:1000A0000C941E050C941E050C941E0579058905FB
+:1000B0009B05AB05B105C005CC05D205E005E905FA
+:1000C000FA050A0610064006F619181A061B181A31
+:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC
+:1000E000281E281E821EC01E38213821D91E382104
+:1000F000DA1FDA1F9D20B4203821232107634236FE
+:10010000B79BD8A71A39685618AEBAAB558C1D3CA8
+:10011000B7CC5763BD6DEDFD753EF6177231BF006C
+:100120000000803F08000000BE922449123EABAAA6
+:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01
+:10014000AA3E00000000BF000000803F0000000049
+:1001500000084178D3BB4387D1133D190E3CC3BD82
+:100160004282AD2B3E68EC8276BED98FE1A93E4C2F
+:1001700080EFFFBE01C4FF7F3F00000000002B00A6
+:1001800014001A000800150017001C0018000C00CD
+:10019000120013002A0029000400160007000900BD
+:1001A0000A000B000D000E000F0033003400E100C8
+:1001B0001D001B000600190005001100100036008C
+:1001C0003700380028000530E000E200E30003308B
+:1001D0002C002C0004305000510052004F002B0026
+:1001E00014001A00090013000A000D000F00180087
+:1001F0001C0033002A002900040015001600170017
+:1002000007000B00110008000C0012003400E10090
+:100210001D001B000600190005000E00100036002E
+:100220003700380028000530E000E200E30003302A
+:100230002C002C0004305000510052004F002B00C5
+:1002400034003600370013001C0009000A000600C5
+:1002500015000F002A0029000400120008001800F1
+:100260000C0007000B001700110016003800E10019
+:10027000330014000D000E001B00050010001A00D2
+:1002800019001D0028000530E000E200E300033003
+:100290002C002C0004305000510052004F00350259
+:1002A0001E021F0220022102220223022402250232
+:1002B000260227022A004C003A003B003C003D0089
+:1002C0003E003F002D022E022F02300231020100BB
+:1002D000400041004200430044004500010001008D
+:1002E0000100010001000100010001000100010006
+:1002F000010001000100AB00AA00A900AE0035001A
+:100300001E001F00200021002200230024002500E1
+:10031000260027002A004C003A003B003C003D002C
+:100320003E003F002D002E002F0030003100010064
+:10033000400041004200430044004500010001002C
+:1003400001000100010001000100010001000100A5
+:10035000010001000100AB00AA00A900AE000000EE
+:10036000000000000000000000000000000000008D
+:10037000000000000000000000000000000000007D
+:10038000000000000000000000000000000000006D
+:10039000000000000000000000000000000000005D
+:1003A000000000000000000000000000000003301A
+:1003B00000000000043000000000000000001E00EB
+:1003C0001E001E001E001E001E001E001E001E003D
+:1003D0001E001E001E00000014001A000800150078
+:1003E00017001C0018000C00120013002F00000062
+:1003F00004001600070009000A000B000D000E00A3
+:100400000F00330034000D3000000000060019001A
+:1004100000000000110010000000000000000000BB
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000010078
+:100780000050010001000100010001000100010012
+:10079000010001004C00010001000100073006309B
+:1007A000135012500030013002300C3001000100B3
+:1007B0000B300A300930083001000100010001004F
+:1007C0000100010001000100010001000100010021
+:1007D00001000100010001000100010001002803E7
+:1007E000540068006500200050006C0061006E003D
+:1007F00063006B0020004B006500790062006F0011
+:1008000061007200640000002C034F00720074004D
+:1008100068006F006C0069006E0065006100720086
+:1008200020004B006500790062006F0061007200DB
+:100830006400730000000403090409026D00040150
+:1008400000A0FA09040000010301010009211101BF
+:100850000001223F000705810308000A0904010086
+:100860000103010200092111010001224D000705C9
+:10087000820308000A0904020001030000000921A4
+:10088000110100012236000705830308000A09044C
+:1008900003000103000000092111010001223900B9
+:1008A000070584031000011201100100000008ED8B
+:1008B000FE606001000102000105010906A10105B9
+:1008C0000719E029E7150025019508750181020542
+:1008D0000819012905950575019102950175039186
+:1008E0000105071900297715002501957875018103
+:1008F00002C005010980A101850216010026B7008A
+:100900001A01002AB700751095018100C0050C0975
+:1009100001A1018503160100269C021A01002A9CF0
+:1009200002751095018100C005010902A1010901AC
+:10093000A100050919012905150025019505750175
+:100940008102950175038101050109300931158185
+:10095000257F95027508810609381581257F950147
+:1009600075088106050C0A38021581257F950175E9
+:10097000088106C0C005010906A101050719E02983
+:10098000E71500250195087501810295017508811B
+:100990000105081901290595057501910295017553
+:1009A0000391010507190029FF150025FF9506751C
+:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B
+:1009C00004B603FE24C08091690490916A04A0914A
+:1009D0006B04B0916C048730904BA740B04BB9F4D6
+:1009E0001092690410926A0410926B0410926C04C5
+:1009F00014BE84B7877F84BF88E10FB6F8948093D4
+:100A00006000109260000FBEE0E0F8E3099513E08B
+:100A1000A0E0B1E0E2E4F4E602C005900D92A23657
+:100A2000B107D9F714E0A2E6B3E001C01D92A936E0
+:100A3000B107E1F70E94FD150C941F320C940000E1
+:100A4000279A2F988FEF9FEF9093870080938600CF
+:100A50008AE08093800089E1809381000C94562D78
+:100A6000282F81110BC080918000877F80938000A8
+:100A700010928D0010928C002F9808952F988091DD
+:100A80008000886080938000233019F48FEF9FEFFF
+:100A90000FC083E090E0821B9109880F991F2FEF10
+:100AA0003FEFA90102C0569547958A95E2F7CA0122
+:100AB00090938D0080938C000895CF93DF93EC0189
+:100AC0000E94ED28BE0180E090E0DF91CF910C9470
+:100AD00018250F931F93462F50E04E30510508F014
+:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499
+:100AF000E331882309F4D3C000E010E0980140E01E
+:100B000064E070E089E292E00E942B1281E090E0C4
+:100B10000FC0882309F4C3C000E010E0980140E052
+:100B200066E070E089EB91E00E942B1282E090E099
+:100B30000E945D05B4C0882309F4B1C000E010E054
+:100B4000980140E068E070E089EE91E00E942B128D
+:100B500084E090E0EDCF882311F083E005C083E0CE
+:100B60000CC0882349F084E00E94952540E164E0B0
+:100B700083E00E946D0A93C084E00E94B625F6CF00
+:100B8000882331F085EE0E947F1C0E94AD2D87C026
+:100B900085EE0E94471D83C0882309F480C00E940F
+:100BA000BF0D7DC0882309F47AC00E94B80D00E013
+:100BB00010E0980140E065E070E089E492E027C031
+:100BC000882309F46CC085E00E94B6250E94E00DE0
+:100BD00066C0882309F463C000E010E0980140E09B
+:100BE00068E070E089E191E00E942B1285E00E94AC
+:100BF000952555C0882309F452C00E94BE1200E01A
+:100C000010E0980140E068E070E089E191E00E9426
+:100C10002B1245C0882309F442C00E94C912EFCFAD
+:100C20008823E9F100E010E0980140E066E070E020
+:100C300089E891E00E942B1284E00E94B62583E0AF
+:100C40000E94B62580E10E94B62585E00E94B62567
+:100C50000E94E00D86E00E9495250E94DA2881110D
+:100C600002C00E94B6280E94F22890E09093680487
+:100C7000809367048068809367040E94F6280FC001
+:100C8000882369F000E010E0980140E066E070E041
+:100C900089E591E00E942B1286E00E94B62580E053
+:100CA00090E01F910F9108950F931F932FEF89EFFD
+:100CB00090E0215080409040E1F700C0000000E04B
+:100CC00010E0980140E065E070E089E492E00E9465
+:100CD0002B121F910F9108950F931F9300E010E0C6
+:100CE000980140E063E070E081E091E00E942B1207
+:100CF0002FEF82E597E0215080409040E1F700C05F
+:100D000000001F910F910895CF92DF92EF92FF9212
+:100D10000F931F93CF93DF93CDB7DEB7CC58D10994
+:100D20000FB6F894DEBF0FBECDBF2091210425FF82
+:100D3000C5C08C01FC01928180910001992309F4C6
+:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF
+:100D50000D929A95E1F7F8019081E0916203F0918C
+:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6
+:100D70003D1FE20FF31F60817181680F711D88278D
+:100D800077FD8095982F0E94F12E20E030E040E41E
+:100D900051E40E94562E6B017C01F801218184E010
+:100DA00090E0821B9109BC01882777FD8095982FE0
+:100DB0000E94F12E9B01AC01C701B6010E94EE2DED
+:100DC0009B01AC0160E070E080E090E40E94643040
+:100DD00020E030E04CE551E40E9401304FE050E06B
+:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103
+:100DF000CF911F910F91FF90EF90DF90CF900C94C7
+:100E0000CB1196E4EEE8F2E0DE01119601900D922E
+:100E10009A95E1F7F8019081E0916203F091630304
+:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9
+:100E3000E20FF31F60817181680F711D882777FDB4
+:100E40008095982F0E94F12E20E030E040E451E49C
+:100E50000E94562E6B017C01F801218184E090E014
+:100E6000821B9109BC01882777FD8095982F0E94ED
+:100E7000F12E9B01AC01C701B6010E94EE2D9B0132
+:100E8000AC0160E070E080E090E40E94643020E01B
+:100E900030E04CE551E40E940130C457DF4F0FB6FB
+:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0
+:100EB000FF90EF90DF90CF900C94130EC457DF4F4C
+:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B
+:100ED0000F91FF90EF90DF90CF90089508950E94BA
+:100EE00020056E9A769A0C9454060C946E070C9416
+:100EF00084060895880F991FFC01E250F040859107
+:100F000094910895880F991FFC01E258FE4F859136
+:100F1000949108950F931F93CF93DF93EC01811564
+:100F200020E49207A0F5C11580E3D80708F0E1C0DE
+:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C
+:100F4000D10578F4C53AD10508F074C0C130D10597
+:100F500009F46DC008F4DEC1C430D10508F0DDC16C
+:100F6000D9C1CB3BD10508F470C0D4C1C11590E202
+:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA
+:100F8000C03FD10508F4C6C18E01106506C2C1304C
+:100F900080E5D80709F4BDC068F5C13120E4D20767
+:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0
+:100FB000CF70DD278E01146DF0C1C33120E4D2075C
+:100FC00009F4A4C008F49FC0C115D04509F0A2C11E
+:100FD0000E945C210E94E00D0E946C069FEF24E3BA
+:100FE0008CE0915020408040E1F700C000000E945A
+:100FF0007928D3C1C11520E6D20730F4C11581E5A7
+:10100000D80708F48CC02DC1C11590E7D90708F4A2
+:1010100081C1C11520E8D20708F478C1C11580E963
+:10102000D80708F077C1DF708E01106AB6C101E001
+:1010300010E0B3C1C53AD10509F471C1C63AD10572
+:1010400009F070C102E810E4A8C1C83AD10509F45A
+:101050006CC1C93AD10509F46BC1CA3AD10509F48A
+:101060006AC1CB3AD10509F469C1CC3AD10509F47A
+:1010700068C1CD3AD10509F467C1C03BD10509F477
+:1010800066C1CE3AD10509F465C1CF3AD10509F45C
+:1010900064C1C13BD10509F463C1C23BD10509F468
+:1010A00062C1C33BD10509F461C1C43BD10509F458
+:1010B00060C1C53BD10509F45FC1C63BD10509F448
+:1010C0005EC1C73BD10509F45DC1C83BD10509F438
+:1010D0005CC1C93BD10509F45BC1CA3BD10509F428
+:1010E0005AC100E014E459C1CE019F700E948207EA
+:1010F00055C1DD278E01106C50C100E011ED4DC1CE
+:1011000000E010ED4AC100E012ED47C100E013ED30
+:1011100044C180913D04816080933D043EC10E94A2
+:10112000DA28811102C00E94B6280E94F22890E0BD
+:101130009093680480936704C23090E5D90721F446
+:1011400080916704816086C0C43020E5D20721F415
+:101150008091670482607EC0C63080E5D80721F4A4
+:1011600080916704846076C0C83090E5D90719F48F
+:101170008091670427C0CA3020E5D20721F480910E
+:101180006704806167C0CC3080E5D80721F4809186
+:10119000670480625FC0CE3090E5D90721F480916A
+:1011A0006704806457C0C03120E5D20721F48091E4
+:1011B000670480684FC0C23180E5D80729F4809168
+:1011C00067048460886046C0C33090E5D90721F485
+:1011D000809167048E7F3EC0C53020E5D20721F4A0
+:1011E000809167048D7F36C0C73080E5D80721F431
+:1011F000809167048B7F2EC0C93090E5D90719F420
+:101200008091670426C0CB3020E5D20721F480917D
+:1012100067048F7E1FC0CD3080E5D80721F4809110
+:1012200067048F7D17C0CF3090E5D90721F48091F6
+:1012300067048F7B0FC0C13120E5D20721F4809174
+:1012400067048F7707C0C331D04531F480916704BC
+:101250008B7F877F80936704809167040E94F628C4
+:101260009CC08D2F99278F70992781309105D9F4D3
+:101270009E012370332702C0880F991F2A95E2F739
+:101280009C688E0144E0000F111F4A95E1F700278A
+:101290001370802B912B53E0CC0FDD1F5A95E1F793
+:1012A000C076DD272FC08230910531F4DC2FCC27AA
+:1012B0008E01016F106A71C08330910569F4CE010F
+:1012C0008370992701E010E002C0000F111F8A957A
+:1012D000E2F7C8019C680FC0049709F05EC0CE0118
+:1012E0008370992701E010E002C0000F111F8A955A
+:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9
+:10130000C07ED7708C010C2B1D2B47C0DF708E0167
+:10131000106243C000E010E040C08E013EC001E812
+:1013200010E43BC003E810E438C002EE14E435C01A
+:1013300009EE14E432C00AEE14E42FC005EB14E405
+:101340002CC006EB14E429C007EB14E426C00CEC17
+:1013500014E423C00DEC14E420C003E815E41DC020
+:101360000AE815E41AC002E915E417C004E915E417
+:1013700014C001E216E411C003E216E40EC004E258
+:1013800016E40BC005E216E408C006E216E405C048
+:1013900007E216E402C00AE216E4C801DF91CF9129
+:1013A0001F910F9108959CE0799FF001112490E323
+:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7
+:1013C000E258FE4F85919491803E9105E0F4803C77
+:1013D000910558F58133910509F46FC048F48932BD
+:1013E000910509F463C08A32910509F46DC072C099
+:1013F00089339105E9F082389105D1F08533910563
+:1014000009F44DC067C0833E910581F138F4803EF8
+:101410009105B9F0823E9105D9F05CC0863E9105F8
+:1014200061F1873E9105A1F155C00E947A070895A8
+:101430002091670420FD02C021FF4CC080EE90E0A7
+:1014400049C08091670480FFF9CF89E390E042C0F2
+:101450008091670482FF0EC08091670484FF03C0FF
+:1014600080E090E037C083EE90E034C08091670464
+:1014700082FFF2CF82EE90E02DC08091670483FF5F
+:101480000BC08091670484FDEBCF87EE90E022C013
+:101490008091670483FFF5CF86EE90E01BC08091BA
+:1014A000670485FF07C089E290E014C0809167045B
+:1014B00085FFF9CF85E390E00DC08091670486FF3A
+:1014C00007C08AE290E006C08091670486FFF9CFEA
+:1014D00081E390E00E948A070895CF92DF92EF9215
+:1014E000FF920F931F9301E010E020E030E06801CD
+:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0
+:1015000004C0000F111F221F331F6A95D2F70C2948
+:101510001D292E293F29C0902104D0902204E0905B
+:101520002304F0902404C022D122E222F322842F4B
+:10153000C016D106E206F30641F41F910F91FF9009
+:10154000EF90DF90CF900C9495251F910F91FF9015
+:10155000EF90DF90CF900C94B62508950C94AD0ACF
+:101560005F926F927F928F929F92AF92BF92CF9233
+:10157000DF92EF92FF920F931F93CF93DF93CDB73C
+:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1
+:1015900001966C014E0199E0890E911C20E030E02B
+:1015A00040E050E060E070E000E010E0E12CF12C61
+:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49
+:1015C000F2E0A62DB52D872D01900D928A95E1F7B9
+:1015D000F601819191916F01FC01E07FFF27E032DC
+:1015E000F10559F48F709927F50102C0EE0FFF1F26
+:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465
+:101600008F709927F50102C0EE0FFF1F8A95E2F750
+:101610000E2B1F2B29C0E034F10559F48F70992748
+:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC
+:101630001BC0E035F10559F48F709927F50102C000
+:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1
+:10165000F10551F48F709927F50102C0EE0FFF1FBD
+:101660008A95E2F72E2B3F2BC814D90409F0A7CF97
+:1016700084B19E2D9095892384B985B1E82AE5B877
+:1016800087B1902F9095892387B988B1082B08B925
+:101690008AB1962F909589238AB98BB1682B6BB943
+:1016A0008DB1942F909589238DB98EB1482B4EB969
+:1016B00080B3922F9095892380BB81B3282B21BBC7
+:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145
+:1016D0001F910F91FF90EF90DF90CF90BF90AF9050
+:1016E0009F908F907F906F905F9008955F926F9220
+:1016F0007F928F929F92AF92BF92CF92DF92EF92A2
+:10170000FF920F931F93CF93DF93CDB7DEB7689708
+:101710000FB6F894DEBF0FBECDBF85B7806885BF1A
+:1017200085B7806885BF0E94B00ACE0101966C0122
+:101730004E0199E1890E911C20E030E040E050E03C
+:1017400060E070E000E010E0E12CF12C6C2C5D2CEE
+:1017500088E1782EAA24A394B12CECEDF2E0A62D1A
+:10176000B52D872D01900D928A95E1F7F6018191B3
+:1017700091916F01FC01E07FFF27E032F10559F400
+:101780008F709927F50102C0EE0FFF1F8A95E2F7CF
+:10179000EE2AFF2A37C0E033F10559F48F709927FC
+:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB
+:1017B00029C0E034F10559F48F709927F50102C072
+:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3
+:1017D000F10559F48F709927F50102C0EE0FFF1F34
+:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0
+:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F
+:101800002E2B3F2BC814D90409F0A7CF84B19E2DED
+:101810009095892384B985B1E82AE5B887B1902FDE
+:101820009095892387B988B1082B08B98AB1962F7A
+:10183000909589238AB98BB1682B6BB98DB1942FA0
+:10184000909589238DB98EB1482B4EB980B3922FD4
+:101850009095892380BB81B3282B21BB10926D0307
+:1018600010926C03109265031092640310926F0340
+:1018700010926E0310926703109266031092710328
+:101880001092700310926903109268031092730310
+:101890001092720310926B0310926A0368960FB64F
+:1018A000F894DEBF0FBECDBFDF91CF911F910F9196
+:1018B000FF90EF90DF90CF90BF90AF909F908F9070
+:1018C0007F906F905F900C946F077F928F929F92A2
+:1018D000AF92BF92CF92DF92EF92FF920F931F933E
+:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6
+:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7
+:1019000083E0F82E98E0792EBC2CAD2C01E010E09D
+:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6
+:10192000872D01900D928A95E1F7F60181919191B1
+:101930006F019C01207F33272032310591F424B1BF
+:101940008F709927A80102C0440F551F8A95E2F7AE
+:10195000CA01922F982B94B995B18095892385B9A6
+:1019600053C02033310591F427B18F709927F801C6
+:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E
+:1019800097B998B18095892388B93EC02034310534
+:1019900091F42AB18F709927A80102C0440F551FF6
+:1019A0008A95E2F7CA01922F982B9AB99BB180953C
+:1019B00089238BB929C02035310591F42DB18F7061
+:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9
+:1019D000922F982B9DB99EB1809589238EB914C002
+:1019E0002036310589F420B38F709927A80102C0F1
+:1019F000440F551F8A95E2F7CA01922F982B90BB8E
+:101A000091B38095892381BB50EA5A95F1F7BE01C5
+:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F
+:101A2000DE011196882D01900D928A95E1F7FB0158
+:101A300081919191BF01FC01E07FFF27E032F10528
+:101A400011F4E3B113C0E033F10511F4E6B10EC0B7
+:101A5000E034F10511F4E9B109C0E035F10511F404
+:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED
+:101A7000992702C0F595E7958A95E2F7E0FD08C041
+:101A8000C801042E02C0880F991F0A94E2F702C011
+:101A900080E090E0282B392B4F5F5F4F4C30510591
+:101AA00009F0BCCFF701808191818217930721F063
+:101AB00031832083909271020E94B00AF2E0EF0E0F
+:101AC000F11C4CE6E41643E0F40609F025CF8091C2
+:101AD0007102882361F1815080937102882339F06B
+:101AE0008FE99FE00197F1F700C0000020C08091CE
+:101AF00064039091650390936D0380936C038091D0
+:101B000066039091670390936F0380936E038091B7
+:101B1000680390916903909371038093700380919F
+:101B20006A0390916B0390937303809372030E94F6
+:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B
+:101B4000DF91CF911F910F91FF90EF90DF90CF9099
+:101B5000BF90AF909F908F907F900895E82FF0E016
+:101B6000EE0FFF1FE459FC4F808191810895089585
+:101B7000809152048160809352040C9408298091D2
+:101B800052048E7F809352040C9408290E94DA2814
+:101B9000811102C00E94B6280E9404298093520439
+:101BA0003E9A809171008D7F8093710082E08093D6
+:101BB00090008AE18093910081E0809376030895FC
+:101BC00080917603811102C00E94C60D1092C60357
+:101BD0001092C503809171008D7F80937100809178
+:101BE00090008F7780939000109288031092870363
+:101BF0001092BF031092C0031092C1031092C2034F
+:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E
+:101C100011921192119211921D921D9283E0ED3B4F
+:101C2000F807B1F70895CF92DF92EF92FF920F93EA
+:101C30001F93CF93DF9320918703222309F484C05D
+:101C40006B017C0180917603811102C00E94C60D58
+:101C50000DEB13E0C7E0D0E0A7019601F8019291E7
+:101C60008291729162918F010E94522E811131C036
+:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219
+:101C8000118212821382DE01AA0FBB1FA357BC4F21
+:101C900011961C921E92C730D105E9F0219644811D
+:101CA0005581668177814083518362837383148277
+:101CB00015821682178212968D919C911397119618
+:101CC0009C938E9313961C921E92129734961296A2
+:101CD000E2CF219708F68091C5039091C603019742
+:101CE00097FD05C09093C6038093C50304C010926E
+:101CF000C6031092C5038091C5039091C60320913D
+:101D0000C3033091C4032817390724F01092C40389
+:101D10001092C303892BC1F4809171008D7F809351
+:101D20007100809190008F77809390001092BF0394
+:101D30001092C0031092C1031092C2031092BE030E
+:101D40001092BD0310928703DF91CF911F910F91E5
+:101D5000FF90EF90DF90CF9008951F920F920FB6F3
+:101D60000F9211244F925F926F927F928F929F9267
+:101D7000AF92BF92CF92DF92EF92FF922F933F9359
+:101D80004F935F936F937F938F939F93AF93BF9383
+:101D9000CF93DF93EF93FF9380918703882309F418
+:101DA0009BC1C091C503D091C6031C161D060CF043
+:101DB00093C14090770350907803609079037090BE
+:101DC0007A0320E030E0A901C301B2010E94FD2F97
+:101DD00018160CF065C0C130D10509F452C08091CD
+:101DE000C3039091C403BE010E94CF317C01909344
+:101DF000C4038093C3038090890390908A03A090CA
+:101E00008B03B0908C0320E030E040E85FE3C50135
+:101E1000B4010E94EE2D6093890370938A0380932E
+:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44
+:101E3000E356FC4FA30192016081718182819381FD
+:101E40000E94562E20E030E040E05EE30E94013028
+:101E50009B01AC01C501B4010E94FD2F18168CF442
+:101E6000C7010196BE010E94CF319093C4038093B5
+:101E7000C3031092890310928A0310928B0310926D
+:101E80008C03E091C303F091C403EE0FFF1FEE0F2C
+:101E9000FF1FE356FC4F6081718182819381D0C026
+:101EA000C090BF03D090C003E090C103F090C20384
+:101EB00020E030E0A901C701B6010E94522E21970F
+:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3
+:101ED000E356FC4F80809180A280B380A5019401DD
+:101EE000C701B6010E94522E87FF31C0A50194019F
+:101EF00060E070E08CED93EC0E94562E20E030E024
+:101F000040E451E40E94562E20E030E040E05FE3E0
+:101F10000E9401309B01AC0160E070E080E090E441
+:101F20000E9464309B01AC01C501B4010E940130E4
+:101F30009B01AC01C701B6010E94522E87FF07C06A
+:101F4000A701960160E070E08CED93E439C0A50133
+:101F50009401C701B6010E94FD2F18160CF055C060
+:101F6000A501940160E070E08CED93E40E94562E90
+:101F700020E030E040E451E40E94562E20E030E0C2
+:101F800040E05FE30E9401309B01AC0160E070E043
+:101F900080E090E40E9464309B01AC01C501B40173
+:101FA0000E9401309B01AC01C701B6010E94FD2FC8
+:101FB00018165CF5A701960160E070E08CED93ECDB
+:101FC0000E94562E20E030E040E451E40E94562E5C
+:101FD00020E030E040E05FE30E9401309B01AC0173
+:101FE00060E070E080E090E40E9464309B01AC010E
+:101FF000C701B6010E9401306093BF037093C00314
+:102000008093C1039093C20313C0FE01EE0FFF1F24
+:10201000EE0FFF1FE356FC4F80819181A281B381B7
+:102020008093BF039093C003A093C103B093C203F6
+:102030006091BF037091C0038091C1039091C2036E
+:1020400020917403309175032F3F4FEF340731F027
+:102050002F5F3F4F30937503209374030E94D41277
+:102060006B017C0120E034E244EF51E40E94522EE7
+:1020700087FF08C086EFC82E88E2D82E84EFE82EAE
+:1020800081E4F82E20E030E040E051E4C701B601E1
+:102090000E9401309B01AC0160E074E284E79BE4A4
+:1020A0000E94562E6B017C010E94BE2E70939700F9
+:1020B00060939600209172023091730240917402F5
+:1020C00050917502C701B6010E9401300E94BE2ED8
+:1020D000709399006093980080918803882309F495
+:1020E00033C1C0908303D0908403E0908503F090C7
+:1020F000860320E030E0A901C701B6010E94FD2F50
+:102100001816D4F580917403909175038F3F2FEFCB
+:10211000920729F001969093750380937403C70189
+:10212000B6010E94D41220E030E040E051E40E9469
+:1021300001309B01AC0160E074E284E79BE40E9403
+:10214000562E6B017C010E94BE2E70939700609307
+:102150009600209172023091730240917402509166
+:102160007502C701B6010E9401300E94BE2E709315
+:1021700099006093980008C0109297001092960002
+:10218000109299001092980060917D0370917E03E7
+:102190006F5F7F4F70937E0360937D032091960065
+:1021A0003091970080E090E0232BF1F0C0919600F1
+:1021B000D09197000E94EF2E6B017C01BE0180E060
+:1021C00090E00E94EF2E9B01AC0160917F03709123
+:1021D000800380918103909182030E94562E20E01B
+:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8
+:1021F00020E030EE4FEF54E460917F037091800354
+:1022000080918103909182030E9401309B01AC0177
+:10221000C701B6010E94FD2F87FD96C080917B0308
+:102220008F5F80937B0390E020914E0430914F04A8
+:1022300082179307A0F080915904882319F0109217
+:102240007B030DC0809171008D7F80937100809120
+:1022500090008F7780939000109288037DC08091CA
+:102260007C03C0917B03811128C0C0905304D0909F
+:102270005404E0905504F090560420E030E0A901A9
+:10228000C701B6010E94FD2F1816BCF481E08093AF
+:102290007C031092830310928403109285031092A2
+:1022A0008603C0927F03D0928003E0928103F09274
+:1022B0008203C150C0937B0343C010927C031092F1
+:1022C000750310927403E0915004F091510448E0BA
+:1022D000C49FE00DF11D112480819181A281B38101
+:1022E0008093830390938403A0938503B093860324
+:1022F00020E030E040E85EE364817581868197816B
+:102300000E9401306B017C0120E030E048EC52E497
+:1023100060917602709177028091780290917902B3
+:102320000E94562E9B01AC01C701B6010E940130EC
+:1023300060937F0370938003809381039093820363
+:1023400010927E0310927D038091520480FD04C0A0
+:102350001092880310928703FF91EF91DF91CF9144
+:10236000BF91AF919F918F917F916F915F914F91AD
+:102370003F912F91FF90EF90DF90CF90BF90AF9063
+:102380009F908F907F906F905F904F900F900FBEB7
+:102390000F901F901895CF92DF92EF92FF92CF93FC
+:1023A000DF936B017C01EA0180917603811102C009
+:1023B0000E94C60D8091520480FF46C08091C503E3
+:1023C0009091C60308970CF03FC0809171008D7FFB
+:1023D000809371008091880381110E94E00D81E05B
+:1023E00080938703109275031092740320E030E00D
+:1023F000A901C701B6010E94FD2F1816DCF48091D7
+:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7
+:10241000E356FC4FC082D182E282F382FC01EE0FD0
+:10242000FF1FE357FC4FD183C08301969093C603EF
+:102430008093C503809171008260809371008091C8
+:102440009000806880939000DF91CF91FF90EF9093
+:10245000DF90CF9008958F929F92AF92BF92CF92CC
+:10246000DF92EF92FF920F931F93CF93DF93EC01D4
+:102470007B01D42E4801590180917603811102C05D
+:102480000E94C60D8091520480FF6BC08091710044
+:102490008D7F809371008091870381110E94E00DF0
+:1024A00081E080938803D0935104C0935004F0924C
+:1024B0004F04E0924E04D0925904809253049092BB
+:1024C0005404A0925504B0925604109289031092BD
+:1024D0008A0310928B0310928C0310927B038881E5
+:1024E0009981AA81BB818093830390938403A093F5
+:1024F0008503B093860320E030E040E85EE36C8122
+:102500007D818E819F810E9401306B017C0120E0E2
+:1025100030E048EC52E4609176027091770280914D
+:102520007802909179020E94562E9B01AC01C7015E
+:10253000B6010E94013060937F0370938003809303
+:1025400081039093820310927E0310927D03809109
+:102550007100826080937100809190008068809308
+:102560009000DF91CF911F910F91FF90EF90DF903E
+:10257000CF90BF90AF909F908F9008958091C703A8
+:1025800090E0019666E070E00E94CF318093C7032F
+:1025900008958091C70390E0019766E070E00E9483
+:1025A000CF318093C70308958F929F92AF92BF92CD
+:1025B000CF92DF92EF92FF920F931F93CF93DF930F
+:1025C0006B017C01C0917403D0917503BE0180E062
+:1025D00090E00E94EF2E4B015C01A701960160E0A4
+:1025E00070E08CE594E40E94562E9B01AC01C5017D
+:1025F000B4010E9401300E94C32E2091C7032330F2
+:1026000009F473C028F4222351F02130E9F02CC1E1
+:10261000243009F4A0C0253009F4E0C025C180E0D1
+:1026200090E0A0E0BFE38093720290937302A093C6
+:102630007402B0937502109277031092780310928F
+:10264000790310927A0310C11092770310927803E5
+:102650001092790310927A036431710540F46A3064
+:10266000710560F520E030E040E85EE32BC0693C96
+:10267000710508F0AAC080E090E00E94EF2E20E0F3
+:1026800030E040EA51E40E94ED2D20E030E044E3E8
+:1026900053E40E94562E9B01AC010E94013020E0C1
+:1026A00030E040E05EE30E9401309B01AC0160E05D
+:1026B00070E080E09EE30E94ED2D44C020E030E019
+:1026C00040E05FE3C701B6010E9401306B017C016D
+:1026D00080E090E0A0E0BEE38093720290937302EA
+:1026E000A0937402B0937502BFC01092770310924A
+:1026F00078031092790310927A034AE0469F900182
+:10270000479F300D1124C90168EB7BE00E94BB316B
+:10271000BC016C5D754077FF03C0719561957109CF
+:10272000882777FD8095982F0E94F12E2EE333ECB9
+:102730004EE259E30E94013020E030E040EC5EE3DD
+:102740000E94EE2D60937202709373028093740264
+:102750009093750289C010927703109278031092BB
+:10276000790310927A03CE0183709927892BE1F0C7
+:10277000BE016170772780E090E00E94EF2E20E09C
+:1027800030E040E05EE30E94013020E030E040E4D1
+:102790005FE30E94EE2D6093720270937302809348
+:1027A0007402909375020CC080E090E0A0E0BFE35B
+:1027B0008093720290937302A0937402B093750297
+:1027C000C770DD27CD2B09F04FC010927202109216
+:1027D0007302109274021092750246C01092770331
+:1027E000109278031092790310927A0300E010E0BF
+:1027F00020E03FE30093720210937302209374026F
+:10280000309375026739710578F180E090E00E949D
+:10281000EF2E20E030E047E153E40E94ED2D20E070
+:1028200030E04AE754E40E94562E20E030E048E4CD
+:1028300052E40E94013020E030E040EA51E40E947E
+:10284000332F0E94BE2E660F771F660F771FFB0186
+:10285000EC50FD4F2081318142815381C701B60187
+:102860000E9401306B017C01C701B601DF91CF915D
+:102870001F910F91FF90EF90DF90CF90BF90AF909E
+:102880009F908F9008958091D8030895CF93DF9300
+:1028900000D01F92CDB7DEB79C0180915E048430DA
+:1028A00019F593E099833B832A839093E9008FEF96
+:1028B0009091E800815095FD06C095ED9A95F1F74D
+:1028C00000008111F5CF8091E80085FF0DC040E048
+:1028D00050E063E070E0CE0101960E94A71680915F
+:1028E000E8008E778093E8000F900F900F90DF91B3
+:1028F000CF910895CF93DF9300D01F92CDB7DEB76D
+:1029000020915E04243021F522E029839B838A8371
+:1029100083E08093E9008FEF9091E800815095FD6E
+:1029200006C095ED9A95F1F700008111F5CF8091E1
+:10293000E80085FF0DC040E050E063E070E0CE01AC
+:1029400001960E94A7168091E8008E778093E80098
+:102950000F900F900F90DF91CF91089520915E041A
+:102960002430F1F422E02093E9002FEF3091E800C9
+:10297000215035FD06C035ED3A95F1F700002111E3
+:10298000F5CF2091E80025FF0BC040E050E065E066
+:1029900070E00E94A7168091E8008E778093E8008F
+:1029A0000895CF93DF93EC0190915E04943009F089
+:1029B00046C0809184028823D9F0809185028823C3
+:1029C000B9F09093E9008FEF9091E800815095FD68
+:1029D00006C095E19A95F1F700008111F5CF80913D
+:1029E000E80085FF2CC040E050E060E170E017C0D7
+:1029F00081E08093E9008FEF9091E800815095FD90
+:102A000006C095ED9A95F1F700008111F5CF809100
+:102A1000E80085FF14C040E050E068E070E0CE01BF
+:102A20000E94A7168091E8008E778093E80080E1ED
+:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9
+:102A4000CF91089580915D04811109C00E943C18C6
+:102A50000E9499188091E20084608093E2000895BA
+:102A600010925D040895089508950C94E12742E0C2
+:102A700061EC81E00E94B61742E061EC82E00E94C6
+:102A8000B61742E061EC83E00E94B61742E161ECC8
+:102A900084E00C94B61780916004833009F455C02B
+:102AA00030F4813071F0823009F48EC008958A309C
+:102AB00009F47AC08B3009F460C0893009F09CC0F9
+:102AC00020C080915F04813A09F096C08091E800AF
+:102AD000877F8093E8008091630490916404892B40
+:102AE00021F460E188EC93E003C060E080E090E0D6
+:102AF00070E00E94F2168091E8008B778093E800E6
+:102B0000089580915F04813209F076C0809163045A
+:102B100090916404009719F0039709F06DC08091BB
+:102B2000E800877F8093E8008091E80082FD05C07F
+:102B300080915E048111F8CF5FC08091F100809395
+:102B4000D8038091E8008B7753C080915F04813A6D
+:102B500009F052C08091630490916404892B09F0BC
+:102B60004BC08091E800877F8093E8008091E80067
+:102B700080FFFCCF8091840236C080915F04813257
+:102B8000D9F58091630490916404892BA9F5809113
+:102B9000E800877F8093E8000E94EB178091610432
+:102BA000809384020C945C2180915F04813221F532
+:102BB0008091E800877F8093E8000E94EB17809166
+:102BC00062048093D903089580915F04813AA1F44F
+:102BD0008091E800877F8093E8008091E80080FF83
+:102BE000FCCF8091D9038093F1008091E8008E772B
+:102BF0008093E8000C94EB17089584B7877F84BF17
+:102C000088E10FB6F89480936000109260000FBEC8
+:102C100090E080E80FB6F894809361009093610093
+:102C20000FBE0E948E1B0E943C180E949918809132
+:102C3000E20084608093E20078940E941F1B0E944F
+:102C4000901B8AE792E00E943A1B80915E048530D7
+:102C500069F40E949B2780915C048823B1F30E9451
+:102C6000C927882391F30E949116EFCF0E94981BE9
+:102C7000ECCF292F332723303105C9F064F42130FC
+:102C8000310581F02230310509F043C08DE690E036
+:102C90002AE338E042C021323105F1F02232310519
+:102CA00041F137C082E190E027EA38E036C0992749
+:102CB0008130910541F08230910541F0892B49F531
+:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A
+:102CD000849190E09F0121C06430D8F4E62FF0E0A9
+:102CE000EE0FFF1FE05BFC4F2081318189E090E017
+:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E
+:102D0000FC4F20813181FB01EC5BFC4F808190E026
+:102D100004C080E090E020E030E0FA0131832083BD
+:102D2000089580E189BD82E189BD09B400FEFDCF2F
+:102D30008091D8008F7D8093D8008091E0008260E0
+:102D40008093E0008091E00081FDFCCF0895CF9258
+:102D5000DF92EF92FF920F931F93CF93DF93EC01DB
+:102D60008B016A010E940A18811133C0C114D10479
+:102D700039F0F60180819181081B190BC80FD91F0A
+:102D8000E12CF12C0115110519F18091E80085FD68
+:102D900016C08091E8008E778093E800C114D104BA
+:102DA00049F0F60180819181E80EF91EF182E082FE
+:102DB00085E00FC00E940A18882321F30AC0899178
+:102DC0008093F10001501109FFEFEF1AFF0ADACFEB
+:102DD00080E0DF91CF911F910F91FF90EF90DF90F6
+:102DE000CF90089520916504309166042617370727
+:102DF00048F06115710539F42091E8002E77209391
+:102E0000E80001C0B90140E061157105A9F1209108
+:102E10005E04222309F443C0253009F442C0209106
+:102E2000E80023FD40C02091E80022FD32C020913F
+:102E3000E80020FFE9CF4091F3002091F20030E05C
+:102E4000342BFC01CF016115710559F02830310593
+:102E500040F481918093F100615071092F5F3F4FE1
+:102E6000F1CF41E02830310509F040E02091E80041
+:102E70002E772093E800C8CF4111C9CF0AC08091B6
+:102E80005E04882361F0853061F08091E80083FD65
+:102E90000AC08091E80082FFF2CF80E0089582E0CE
+:102EA000089583E0089581E00895209165043091AC
+:102EB00066042617370748F06115710539F420912B
+:102EC000E8002E772093E80001C0B901FC0120E062
+:102ED0006115710591F180915E04882309F440C069
+:102EE000853009F43FC08091E80083FD3DC08091AA
+:102EF000E80082FD2FC08091E80080FFE9CF20919B
+:102F0000F3008091F20090E0922B6115710559F069
+:102F10008830910540F424912093F100319661505E
+:102F200071090196F2CF21E0089709F020E0809125
+:102F3000E8008E778093E800CBCF2111CCCF0AC078
+:102F400080915E04882361F0853061F08091E80013
+:102F500083FD0AC08091E80082FFF2CF80E00895EF
+:102F600082E0089583E0089581E00895982F9730D6
+:102F700058F59093E900981739F07091EC00209182
+:102F8000ED005091F00003C0242F762F50E021FF78
+:102F900019C03091EB003E7F3093EB003091ED0093
+:102FA0003D7F3093ED003091EB0031603093EB00CA
+:102FB0007093EC002093ED005093F0002091EE0010
+:102FC00027FF07C09F5FD3CF8F708093E90081E018
+:102FD000089580E0089580915F0487FF11C080917B
+:102FE000E80082FD05C080915E048111F8CF11C018
+:102FF0008091E8008B770BC080915E04882349F0B4
+:103000008091E80080FFF8CF8091E8008E77809370
+:10301000E80008952091E4003091E50095E64091A4
+:10302000EC00842F817040FF22C08091E80080FD79
+:103030001CC080915E04882391F0853091F08091CE
+:10304000EB0085FD10C04091E4005091E50042176F
+:10305000530729F39A01915011F784E0089582E013
+:10306000089583E0089581E0089580E008954091F7
+:10307000E80042FFDECF08950E94AA180E94B2180D
+:10308000E0EEF0E0808181608083E8EDF0E0808117
+:103090008F77808319BCA7EDB0E08C918E7F8C93E5
+:1030A00080818F7E808310925D0408950F931F931B
+:1030B000CF93DF930E94AA180E94B218C8EDD0E007
+:1030C00088818F77888388818068888388818F7DD5
+:1030D000888319BC10925E0410925A0410925C040A
+:1030E00010925B0400EE10E0F80180818B7F8083FA
+:1030F00088818160888342E060E080E00E94B617AA
+:10310000E1EEF0E080818E7F8083E2EEF0E080816E
+:1031100081608083808188608083F80180818E7FD8
+:103120008083888180618883DF91CF911F910F9187
+:103130000895E8EDF0E080818F7E8083E7EDF0E098
+:1031400080818160808384E082BF81E080935D0420
+:103150000C945618E8EDF0E080818E7F8083109209
+:10316000E20008951092DA001092E10008951F9293
+:103170000F920FB60F9211242F933F934F935F93AB
+:103180006F937F938F939F93AF93BF93EF93FF932F
+:103190008091E10082FF0BC08091E20082FF07C0B6
+:1031A0008091E1008B7F8093E1000E941E1B809143
+:1031B000DA0080FF1FC08091D80080FF1BC0809183
+:1031C000DA008E7F8093DA008091D90080FF0DC0F5
+:1031D00080E189BD82E189BD09B400FEFDCF81E0B7
+:1031E00080935E040E94221505C019BC10925E04F3
+:1031F0000E9430158091E10080FF19C08091E200AB
+:1032000080FF15C08091E2008E7F8093E200809164
+:10321000E20080618093E2008091D8008062809318
+:10322000D80019BC85E080935E040E94341580911B
+:10323000E10084FF30C08091E20084FF2CC080E177
+:1032400089BD82E189BD09B400FEFDCF8091D8001F
+:103250008F7D8093D8008091E1008F7E8093E10084
+:103260008091E2008F7E8093E2008091E200816095
+:103270008093E20080915A04882311F084E007C013
+:103280008091E30087FD02C081E001C083E080936C
+:103290005E040E9435158091E10083FF29C0809172
+:1032A000E20083FF25C08091E100877F8093E100E9
+:1032B00082E080935E0410925A048091E1008E7F38
+:1032C0008093E1008091E2008E7F8093E200809104
+:1032D000E20080618093E20042E060E080E00E94D2
+:1032E000B6178091F00088608093F0000E9433153B
+:1032F000FF91EF91BF91AF919F918F917F916F91CE
+:103300005F914F913F912F910F900FBE0F901F90A3
+:1033100018951F920F920FB60F9211242F933F937F
+:103320004F935F936F937F938F939F93AF93BF93CD
+:10333000CF93DF93EF93FF93C091E900CF7080911B
+:10334000EC00D82FD17080FDD0E81092E900809178
+:10335000F000877F8093F00078940E94CD1910923E
+:10336000E9008091F00088608093F000CD2BCF7051
+:10337000C093E900FF91EF91DF91CF91BF91AF91A1
+:103380009F918F917F916F915F914F913F912F917D
+:103390000F900FBE0F901F9018951F93CF93DF9340
+:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C
+:1033B000EFE5F4E088E08E0F9091F10091938E1389
+:1033C000FBCF0E944B158091E80083FF1FC18091C5
+:1033D0005F0490916004492F50E04A30510508F095
+:1033E00015C1FA01EC59FF4F0C94E331803881F09C
+:1033F000823809F00BC1809163048F708093E900DB
+:103400008091EB0085FB882780F91092E90006C0C7
+:1034100080915B0490915C04911182609091E8002E
+:10342000977F9093E8008093F1001092F100C8C05C
+:10343000282F2D7F09F0EAC0882319F0823061F02F
+:10344000E5C080916104813009F0E0C0933009F05B
+:1034500080E080935C042BC080916104811127C0BF
+:10346000809163048F7009F4D1C08093E9002091AA
+:10347000EB0020FF1CC0933021F48091EB008062B0
+:1034800014C09091EB0090619093EB0021E030E04C
+:10349000A90102C0440F551F8A95E2F74093EA0044
+:1034A0001092EA008091EB0088608093EB0010920C
+:1034B000E9008091E800877F86C08111A7C0109144
+:1034C00061041F778091E3008078812B8093E30073
+:1034D0008091E800877F8093E8000E94EB1780913D
+:1034E000E80080FFFCCF8091E30080688093E300D8
+:1034F000111102C082E001C083E080935E0486C0A7
+:103500008058823008F082C08091610490916204FA
+:103510008C3D53E0950779F583E08A838AE28983BD
+:103520004FB7F894DE01139620E03EE051E2E32F1E
+:10353000F0E050935700E49120FF03C0E295EF7054
+:103540003F5FEF708E2F90E0EA3010F0C79601C019
+:10355000C0968D939D932F5F243149F74FBF809183
+:10356000E800877F8093E8006AE270E0CE01019670
+:103570000E94F21614C0AE014F5F5F4F609163046A
+:103580000E943916BC01009709F440C09091E800F0
+:10359000977F9093E80089819A810E9455178091C6
+:1035A000E8008B778093E80031C0803879F580910E
+:1035B000E800877F8093E80080915A048093F100AF
+:1035C0008091E8008E778093E8000E94EB171EC080
+:1035D00081111CC0909161049230C0F48091E80088
+:1035E000877F8093E80090935A040E94EB178091A4
+:1035F0005A04811106C08091E30087FD02C081E07A
+:1036000001C084E080935E040E9437158091E80039
+:1036100083FF0AC08091E800877F8093E800809153
+:10362000EB0080628093EB00AA960FB6F894DEBFA1
+:103630000FBECDBFDF91CF911F9108950895CF9315
+:1036400080915E048823A1F0C091E900CF70909131
+:10365000EC00892F817090FD80E8C82B1092E90062
+:103660008091E80083FD0E94CD19CF70C093E900DE
+:10367000CF9108959093DF038093DE030895E09146
+:10368000DE03F091DF03309721F00190F081E02D0F
+:10369000099480E00895E091DE03F091DF03309714
+:1036A00021F00280F381E02D09940895E091DE037A
+:1036B000F091DF03309721F00480F581E02D09942B
+:1036C00008952091DC033091DD038217930771F098
+:1036D0009093DD038093DC03E091DE03F091DF0340
+:1036E000309721F00680F781E02D0994089520910C
+:1036F000DA033091DB038217930771F09093DB03B9
+:103700008093DA03E091DE03F091DF03309721F03C
+:103710000084F185E02D0994089508950C948D1B83
+:103720000E9415280E94760B0E949B280C94562D0F
+:103730004F925F927F928F929F92AF92BF92CF9261
+:10374000DF92EF92FF920F931F93CF93DF93CDB74A
+:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A
+:10376000650C91EEC92E93E0D92E00E010E0AA245A
+:10377000A394B12C702E802F0E94AE0D4C01F60147
+:10378000419051906F014826592641145104B1F4DB
+:103790000F5F1F4F0430110569F78FEF89838A830C
+:1037A0001B820E941E288160782F9D838C83498113
+:1037B0005A816B818D810E94511C3AC080913D04D9
+:1037C00081FD0E94B70D20E030E07501022E02C09D
+:1037D000EE0CFF1C0A94E2F7C70184219521892B86
+:1037E00009F12E837F828E209F2091E0892809F4A1
+:1037F00090E098870E941E288160782F9A87898799
+:103800004E815F8168858A850E94511C000F111FBF
+:10381000F801EF51FC4F80819181E826F926F18271
+:10382000E08206C02F5F3F4F2C30310571F6B0CFDC
+:103830000E94872A1091E0030E943F1B1817D9F0BD
+:103840000E943F1B8093E0032A960FB6F894DEBFD8
+:103850000FBECDBFDF91CF911F910F91FF90EF90E1
+:10386000DF90CF90BF90AF909F908F907F905F90B0
+:103870004F900C94AE0A2A960FB6F894DEBF0FBE96
+:10388000CDBFDF91CF911F910F91FF90EF90DF900F
+:10389000CF90BF90AF909F908F907F905F904F9010
+:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B
+:1038B000DEBF0FBECDBF4F83588769877A878B875E
+:1038C000DE01119686E0FD0111928A95E9F785E007
+:1038D000FE01379601900D928A95E1F749815A8150
+:1038E0006B817C818D819E810E94F6232B960FB681
+:1038F000F894DEBF0FBECDBFDF91CF910895CF9377
+:10390000882309F4C2C0C82F823859F40E943F1B93
+:1039100081FDBBC089E30E949F260E946C2789E33A
+:103920000CC0833879F40E943F1B80FDAEC083E554
+:103930000E949F260E946C2783E50E94E126CF917A
+:103940000C946C27843859F40E943F1B82FD9DC063
+:1039500087E40E949F260E946C2787E4EECF8CEFBD
+:103960008C0F813A48F48C2F0E94BE2C81118DC09F
+:103970008C2F0E949F26E3CF80E28C0F883048F482
+:10398000C77081E001C0880FCA95EAF70E94252719
+:10399000D6CF8BE58C0F833078F4C53A29F0C63A40
+:1039A00031F083E890E005C081E890E002C082E851
+:1039B00090E0CF910C94611B88E58C0F833108F067
+:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F
+:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F
+:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F
+:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D
+:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092
+:103A100090E038C082EE90E035C089EE90E032C090
+:103A20008AEE90E02FC085EB90E02CC086EB90E012
+:103A300029C087EB90E026C08CEC90E023C08DEC91
+:103A400090E020C083E891E01DC08AE891E01AC0B0
+:103A500082E991E017C084E991E014C081E292E02C
+:103A600011C083E292E00EC084E292E00BC085E2D6
+:103A700092E008C086E292E005C087E292E002C0D0
+:103A80008AE292E0CF910C94771BCF91089588231E
+:103A900009F44BC0823859F40E943F1B81FF45C096
+:103AA00089E30E949F260E946C2789E30CC083381B
+:103AB00071F40E943F1B80FF38C083E50E949F265F
+:103AC0000E946C2783E50E94E1260C946C278438C1
+:103AD00059F40E943F1B82FF28C087E40E949F2662
+:103AE0000E946C2787E4EFCF9CEF980F913A58F330
+:103AF00090E2980F983050F4877091E001C0990FD0
+:103B00008A95EAF7892F0E942B27DFCF9BE5980F34
+:103B1000933020F480E090E00C94611B885A83314C
+:103B200020F480E090E00C94771B0895882321F026
+:103B30000E9425270C946C270895882321F00E9469
+:103B40002B270C946C270895BF92CF92DF92EF92AF
+:103B5000FF920F931F93CF93DF9300D000D000D03C
+:103B6000CDB7DEB725E0FC01DE01119601900D9284
+:103B70002A95E1F7FC01D0801181028125812295EF
+:103B80002F7043815481452B09F472C31F3F21F4E8
+:103B9000FFEFDF1609F46CC37C012E830E947707C8
+:103BA000D9821A8369817A81802F0E949B26182FDF
+:103BB000B92E0E9450260E9417252E81002319F04D
+:103BC0000E9442272E81EB2DE295EF70F0E0E25942
+:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E
+:103BE000882319F0F29480EFF822002389F0FF2057
+:103BF00009F47CC280E2810F883020F48F2D0E946E
+:103C0000252703C08F2D0E9435270E946C276EC286
+:103C1000812F0E94471DFF2009F42AC3105E8F2DBB
+:103C2000183018F40E942B2702C00E943B272696CA
+:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD
+:103C40000F91FF90EF90DF90CF90BF900C946C2776
+:103C50008B2D807F9B2D9F70803211F4892F03C0A4
+:103C6000892F8295807F112319F0113011F12BC01B
+:103C70000023A9F0222389F1213079F526960FB689
+:103C8000F894DEBF0FBECDBFDF91CF911F910F9192
+:103C9000FF90EF90DF90CF90BF900C945527222398
+:103CA00019F0213009F4E4C28E830E9458278E81D6
+:103CB0009BC1002321F0263008F0DAC20EC0253067
+:103CC00008F0D6C291C10023C9F0222331F0F701D8
+:103CD000958190FF0BC29F70958326960FB6F8943E
+:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F
+:103CF000EF90DF90CF90BF900C94961D222309F493
+:103D000073C109C22B2D26952695237030E021150D
+:103D1000310521F021303105D1F0AAC2002321F074
+:103D2000812F9B2D937002C080E090E026960FB605
+:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1
+:103D4000FF90EF90DF90CF90BF900C94611B002309
+:103D500021F0812F9B2D937002C080E090E0269689
+:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C
+:103D70000F91FF90EF90DF90CF90BF900C94771B46
+:103D8000812F002319F00E948F2902C00E94F72979
+:103D900026960FB6F894DEBF0FBECDBFDF91CF9150
+:103DA0001F910F91FF90EF90DF90CF90BF900C94F8
+:103DB0007C2A8B2D837009F07BC0011159C2812FA1
+:103DC000829586958770880F880F912F9F70C92ED6
+:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7
+:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD
+:103DF00070E004C0440F551F661F771F8A95D2F7E5
+:103E0000CB01BA01609570958095909503C060E0F4
+:103E100070E0CB012B2D269526952370422F50E084
+:103E200042305105D9F04330510569F16C297D29A3
+:103E30008E299F294130510551F126960FB6F894ED
+:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD
+:103E5000EF90DF90CF90BF900C943E256C297D2988
+:103E60008E299F2926960FB6F894DEBF0FBECDBFD0
+:103E7000DF91CF911F910F91FF90EF90DF90CF9046
+:103E8000BF900C945A250E943E25C701B601269684
+:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B
+:103EA0000F91FF90EF90DF90CF90BF900C94222560
+:103EB000002319F08B2D817001C08695882309F4A9
+:103EC000D7C1812F829586958770880F880F912F93
+:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3
+:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039
+:103EF00050E060E070E004C0440F551F661F771F5C
+:103F00008A95D2F7CB01BA0160957095809590950E
+:103F100003C060E070E0CB012B2D26952695237021
+:103F2000422F50E042305105D9F04330510569F13C
+:103F30006C297D298E299F294130510551F1269602
+:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA
+:103F50000F91FF90EF90DF90CF90BF900C941826B8
+:103F60006C297D298E299F2926960FB6F894DEBFED
+:103F70000FBECDBFDF91CF911F910F91FF90EF90BA
+:103F8000DF90CF90BF900C9434260E941826C70172
+:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7
+:103FA000CF911F910F91FF90EF90DF90CF90BF9036
+:103FB0000C94FC25103F49F118F4103E48F491C0D0
+:103FC000123F09F453C0E8F1133F09F464C089C0FB
+:103FD0001F708B2D8F71002321F00E949525812F5A
+:103FE0007CCE0E94B625812F26960FB6F894DEBFB0
+:103FF0000FBECDBFDF91CF911F910F91FF90EF903A
+:10400000DF90CF90BF900C949D1D0023B1F0253020
+:1040100008F02EC18B2D8F7126960FB6F894DEBF57
+:104020000FBECDBFDF91CF911F910F91FF90EF9009
+:10403000DF90CF90BF900C94DB25263008F018C19C
+:10404000E9CF0023A9F08B2D8F7126960FB6F89437
+:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB
+:10406000EF90DF90CF90BF900C949525002359F3EB
+:104070008B2D8F7126960FB6F894DEBF0FBECDBF85
+:10408000DF91CF911F910F91FF90EF90DF90CF9034
+:10409000BF900C94B625002399F08B2D8F71269636
+:1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149
+:1040B0000F91FF90EF90DF90CF90BF900C948025F0
+:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D
+:1040D0001F910F91FF90EF90DF90CF90BF900C94C5
+:1040E00076250023A9F0222309F4ADCF812F26964F
+:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9
+:104100000F91FF90EF90DF90CF90BF900C947F1CA9
+:10411000222309F4ADCF812F26960FB6F894DEBF87
+:104120000FBECDBFDF91CF911F910F91FF90EF9008
+:10413000DF90CF90BF900C94471D4B2D4F70612F97
+:10414000C7010E94690526960FB6F894DEBF0FBE20
+:10415000CDBFDF91CF911F910F91FF90EF90DF9036
+:10416000CF90BF900C949A24011182C09B2D9F7018
+:10417000492F50E04230510509F443C0C4F44115C1
+:10418000510571F14130510509F072C026960FB604
+:10419000F894DEBF0FBECDBFDF91CF911F910F917D
+:1041A000FF90EF90DF90CF90BF900C947E2D433026
+:1041B0005105C1F14430510509F05AC0812F2696AE
+:1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128
+:1041D0000F91FF90EF90DF90CF90BF900C94D02D77
+:1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC
+:1041F0001F910F91FF90EF90DF90CF90BF900C94A4
+:10420000672D26960FB6F894DEBF0FBECDBFDF91A7
+:10421000CF911F910F91FF90EF90DF90CF90BF90C3
+:104220000C949A2D26960FB6F894DEBF0FBECDBF24
+:10423000DF91CF911F910F91FF90EF90DF90CF9082
+:10424000BF900C94AD2D4B2D4F70612FC70126965A
+:104250000FB6F894DEBF0FBECDBFDF91CF911F9197
+:104260000F91FF90EF90DF90CF90BF900C94790763
+:1042700026960FB6F894DEBF0FBECDBFDF91CF916B
+:104280001F910F91FF90EF90DF90CF90BF90089516
+:104290000E9442270E9452270E9417270E946C27E3
+:1042A0000E942D2B0E947C2A80E090E00E94611BDE
+:1042B00080E090E00C94771B0E9432270C944821F8
+:1042C0000E949026292F22952F7030E02C30310546
+:1042D0004CF42A3031056CF422503109223031057A
+:1042E00088F407C02C30310549F02F30310531F00A
+:1042F00009C0803E48F0803F29F406C093FB882720
+:1043000080F9089580E0089581E00895CF93DF93C8
+:1043100000D000D01F92CDB7DEB70F900F900F9056
+:104320000F900F90DF91CF910895CF93DF9300D03E
+:1043300000D000D0CDB7DEB726960FB6F894DEBF1A
+:104340000FBECDBFDF91CF9108951F93CF93DF9321
+:10435000C091E90316E08091EA03C81799F0D0E014
+:104360001C9FF0011D9FF00D1124E551FC4F408171
+:10437000518162817381848195810E94952121966A
+:10438000C770E9CFDF91CF911F91089540911B0431
+:1043900050911C0460911D0470911E0480911F04B3
+:1043A000909120040C9495218091200482958F7027
+:1043B00009F054C080911D04882309F44FC08091F6
+:1043C000E903A091EA0360911B0470911C044091E1
+:1043D0001E0450911F04B6E08A1709F43FC090E014
+:1043E00041155105C1F17F3F11F46F3FA1F1B89F15
+:1043F000F001B99FF00D1124E551FC4F218172139A
+:104400002AC02081621327C02281211124C0238168
+:1044100034812417350710F421503109241B350B42
+:10442000283C3105C0F4209120042F702061209396
+:10443000200426E0289FF001299FF00D1124E0516F
+:10444000FC4F80818F70806180838BE194E00E94BB
+:10445000A41D0C94A52101968770BECF0895CF921C
+:10446000DF92EF92FF920F931F93CF93DF93CDB71D
+:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA
+:1044800085E0F801DE011D9601900D928A95E1F715
+:10449000D8014C9111965C91119712966C911297DC
+:1044A0001396CD90DC90149730911B0470911C04EE
+:1044B00080911E0490911F04009709F46BC17F3F07
+:1044C00019F43F3F09F466C1E0901D04EE2009F4A1
+:1044D000C0C020912004C816D90628F0F601E81BB8
+:1044E000F90BCF0104C0809590958C0D9D1DFF2484
+:1044F000F394883C910578F0F12C207F09F0C6C038
+:104500007C2DD98AC88A89890E9486218BE194E012
+:104510000E94A41DB1C0822F807F09F046C0751390
+:1045200014C0341312C0611110C02F702061209389
+:1045300020040E94C6218BE194E00E94A41D80917A
+:104540002004D80115968C932EC0CD2819F15F3F19
+:1045500011F44F3FF9F0F62E61111CC08091E90370
+:104560002091EA0336E0821709F45AC090E0389FA0
+:10457000F001399FF00D1124E551FC4F7181571363
+:1045800006C07081471303C07281711103C0019688
+:104590008770E9CFF62E662309F418C180912004B4
+:1045A000816080932004F12C11C1751308C034136D
+:1045B00006C0611104C080912004D801C3C04D879A
+:1045C0005E878D859E856A8B0E9460216A8988231B
+:1045D000E1F16623D1F120912004822F82958F7022
+:1045E00090E0029774F080911B0490911C049887CE
+:1045F0008F831986DB86CA862C87CE0107960E9498
+:10460000A41D86E0F801ABE1B4E001900D928A951B
+:10461000E1F70E94D4210E94C621FF24F394D6C062
+:104620004D875E878D859E850E949026292F229535
+:104630002F7030E0223031050CF0BCC09F7009F0C3
+:10464000B6C0805E883008F4C1C0C8010E94A41DB5
+:10465000E4CFC816D90608F453C0F601E81BF90BDD
+:10466000CF01883C910508F450C0F12C7C2DD98AEB
+:10467000C88A89890E948621EBE1F4E086E0DF01A7
+:104680001D928A95E9F70E94C621A0C0751314C037
+:10469000341312C0611110C080912004F801858389
+:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249
+:1046B0008A95E9F7FE2C8AC04D875E878D859E8599
+:1046C0006A8B0E9460216A89882309F4BECF662321
+:1046D00009F4BBCF20912004822F82958F7090E047
+:1046E00002970CF48ECF80911B0490911C049A8346
+:1046F00089831B82DD82CC822E83CE0101967FCFFF
+:10470000809590958C0D9D1DACCFF62E662309F4F7
+:104710009CCF75132EC034132CC02091200420FD93
+:104720001FC0822F82958F70D9F0D80115962C93D7
+:1047300015978F3049F08F5F982F9295907F822F39
+:104740008F70892B15968C93C8010E94A41D86E05A
+:10475000F801ABE1B4E001900D928A95E1F793CFB7
+:1047600086E0F801ABE1B4E001900D928A95E1F7A3
+:104770002DC04D875E878D859E850E9460218111A9
+:1047800040CF80912004816080932004C8010E9462
+:10479000A41D1CC0662309F458CF4D875E878D8504
+:1047A0009E850E946021882309F44FCF2ACF811172
+:1047B00048CF0CC0243031050CF047CF9F7009F46E
+:1047C00040CFF8019581907F09F03BCF8F2D629605
+:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112
+:1047E0000F91FF90EF90DF90CF9008951F93CF939C
+:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0
+:10480000CDBF4F83588769877A878B879C87CE0176
+:1048100007960E942F22882369F08F8198852A8528
+:104820003B85232BF1F19F3F09F063C08F3F09F0D7
+:1048300060C037C086E0FE013796DE011196019018
+:104840000D928A95E1F76F817885EA85FB8530972F
+:1048500041F17F3F11F46F3F21F12091EA0330E0F5
+:10486000C9010196877099274091E90350E08417A8
+:10487000950709F447C069837A83FD83EC8396E04A
+:10488000929FD001939FB00D1124A551BC4FFE0102
+:10489000319601900D929A95E1F78093EA030E9478
+:1048A000A52116E08091E9039091EA038917C1F1EF
+:1048B000189FC001112485519C4F0E942F228823EC
+:1048C00079F1E091E9031E9FF0011124E551FC4FBD
+:1048D0004081518162817381848195810E949521FB
+:1048E0008091E90390E00196877099278093E9030E
+:1048F000D9CF4F81588569857A858B859C850E94A3
+:104900009521CFCF0E945C211092EA031092E90317
+:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73
+:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE
+:104930001F910895EF92FF920F931F93CF93DF93F0
+:104940008C01009709F46CC0F12CEE24E394E8018B
+:104950002196F8018491843740F4843008F051C0E6
+:10496000813081F0823019F15BC0853709F444C091
+:10497000A8F19CE7980F903708F052C08F770E94FB
+:10498000471D41C00E5F1F4FFE01C49180E28C0F96
+:10499000883048F4C7708E2D01C0880FCA95EAF799
+:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3
+:1049B0001F4FFE01C49180E28C0F883058F4C770FD
+:1049C0008E2D01C0880FCA95EAF70E944B270E94DE
+:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8
+:1049E000FE01C491CC2381F08FE99FE00197F1F79C
+:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3
+:104A000003C00E947F1C8E018F2D882309F49FCF45
+:104A1000EFE9FFE03197F1F700C000008150F5CFDA
+:104A2000DF91CF911F910F91FF90EF90089508951E
+:104A300060932504709326048093270490932804A0
+:104A40000C9448210F931F93009125041091260484
+:104A50002091270430912804DC01CB01802B912B7D
+:104A6000A22BB32B8093250490932604A0932704B4
+:104A7000B09328041F910F910C9448210F931F931A
+:104A800000912504109126042091270430912804D8
+:104A9000DC01CB0180239123A223B323809325043F
+:104AA00090932604A0932704B09328041F910F919C
+:104AB0000C9448210F931F93009125041091260414
+:104AC0002091270430912804DC01CB018027912715
+:104AD000A227B3278093250490932604A09327044C
+:104AE000B09328041F910F910C9448211092210437
+:104AF0001092220410922304109224040C94482152
+:104B000041E050E060E070E004C0440F551F661FB4
+:104B1000771F8A95D2F74093210450932204609323
+:104B20002304709324040C94482141E050E060E099
+:104B300070E004C0440F551F661F771F8A95D2F797
+:104B40008091210490912204A0912304B091240427
+:104B5000482B592B6A2B7B2B409321045093220422
+:104B600060932304709324040C94482141E050E0A6
+:104B700060E070E004C0440F551F661F771F8A95E0
+:104B8000D2F7409550956095709580912104909151
+:104B90002204A0912304B0912404482359236A23BA
+:104BA0007B23409321045093220460932304709349
+:104BB00024040C94482141E050E060E070E004C01F
+:104BC000440F551F661F771F8A95D2F780912104E5
+:104BD00090912204A0912304B091240448275927DE
+:104BE0006A277B2740932104509322046093230477
+:104BF000709324040C9448210F931F930091210477
+:104C0000109122042091230430912404DC01CB0173
+:104C1000802B912BA22BB32B809321049093220401
+:104C2000A0932304B09324041F910F910C94482166
+:104C30000F931F93009121041091220420912304CB
+:104C400030912404DC01CB0180239123A223B323E0
+:104C50008093210490932204A0932304B09324040E
+:104C60001F910F910C9448210F931F9300912104E1
+:104C7000109122042091230430912404DC01CB0103
+:104C800080279127A227B3278093210490932204A1
+:104C9000A0932304B09324041F910F910C944821F6
+:104CA0000895CF92DF92EF92FF920F931F93CF93CD
+:104CB000DF938C01C0902504D0902604E090270457
+:104CC000F09028048091210490912204A091230463
+:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD
+:104CE000D701C6010C2E04C0B695A7959795879558
+:104CF0000A94D2F780FF06C0B8018C2F0E94D30916
+:104D0000019721F4219760F780E001C08C2FDF919B
+:104D1000CF911F910F91FF90EF90DF90CF9008956A
+:104D2000CF93DF93EC010E945126BE010E94D3096C
+:104D3000DF91CF910895CB010E9490260895909124
+:104D40008402992321F090918502911109C020914C
+:104D5000860230918702F90132969FEF40E01FC032
+:104D6000982F9695969596959F3050F5E0918602EE
+:104D7000F0918702E90FF11D877021E030E0A90171
+:104D800002C0440F551F8A95E2F7CA019181892B11
+:104D9000818308959F3F39F04F5F4E3041F051912C
+:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77
+:104DB00039F0F901E90FF11D97FDFA958283089505
+:104DC000089590918402992321F090918502911188
+:104DD00009C02091860230918702F9013296205F46
+:104DE0003F4F1FC0982F9695969596959F30F0F45B
+:104DF000E0918602F0918702E90FF11D877021E0B2
+:104E000030E0A90102C0440F551F8A95E2F7CA019C
+:104E1000809591818923818308953196E217F30764
+:104E200029F090819813F9CF1082F7CF089581E08F
+:104E300090E0E0918602F0918702E80FF91F10825E
+:104E4000019680319105A9F7089590913C04892B32
+:104E500080933C040895809590913C04892380932D
+:104E60003C04089510923C04089590913B04892BD2
+:104E700080933B040895809590913B04892380930F
+:104E80003B04089510923B04089590913A04892BB5
+:104E900080933A040895809590913A0489238093F1
+:104EA0003A04089510923A040895809329040895CD
+:104EB0001092290408958091860290918702FC0146
+:104EC00031969C01205F3F4F80E0919191118F5F5F
+:104ED000E217F307D1F70895E0918602F091870277
+:104EE00080913C048083E0918602F091870290815A
+:104EF00080913B04892B8083E0918602F0918702A8
+:104F0000908180913A04892B8083809129048823A1
+:104F100061F0E0918602F09187029081892B808375
+:104F20000E945B2781111092290480918602909142
+:104F300087020C944B1B80915E04843039F11092EF
+:104F40003E0420E488E190E00FB6F894A8958093A1
+:104F500060000FBE2093600080E00E94300580E07A
+:104F60000E94AE0A83B7817F846083BF83B781606C
+:104F700083BF7894889583B78E7F83BF88E10FB60F
+:104F8000F89480936000109260000FBE0895089519
+:104F90000895CF9380E00E9430050E94C7270E94A9
+:104FA000650C0E94C827C0E08C2F0E94AE0D892B93
+:104FB00029F4CF5FC430C1F780E001C081E0CF9118
+:104FC00008950E945C2180E00E9430050E94562DC9
+:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5
+:104FE00011248F939F93AF93BF9380913E048111BF
+:104FF00013C080913F0490914004A0914104B0916E
+:1050000042044196A11DB11D80933F04909340043A
+:10501000A0934104B0934204BF91AF919F918F91AF
+:105020000F900FBE0F901F90189582E084BD93E003
+:1050300095BD9AEF97BD80936E0008952FB7F894B1
+:1050400080913F0490914004A0914104B0914204AA
+:105050002FBF0895CF92DF92EF92FF920F931F938D
+:105060002FB7F89440913F0450914004609141045F
+:10507000709142042FBF6A017B01EE24FF248C0152
+:1050800020E030E0C016D106E206F30610F44150ED
+:1050900051099A01281B390BC9011F910F91FF90EB
+:1050A000EF90DF90CF9008951F920F920FB60F925E
+:1050B00011248F939F93AF93BF9380913F0490915E
+:1050C0004004A0914104B09142040196A11DB11D7C
+:1050D00080933F0490934004A0934104B093420412
+:1050E000BF91AF919F918F910F900FBE0F901F9026
+:1050F00018950E943C18F8942FEF87EA91E621500A
+:1051000080409040E1F700C0000087E090EBDC01B8
+:105110008093690490936A04A0936B04B0936C0429
+:105120009CE088E10FB6F894A895809360000FBECC
+:1051300090936000FFCF0E94DA28811102C00E9484
+:10514000B6280E94E52880933D040E94F2288093AF
+:10515000670487FB882780F9809385020E94E928ED
+:10516000682F70E080E090E00C9418256DEE7EEFE3
+:1051700080E090E00E94093260E082E090E00E94CE
+:10518000F73160E083E090E00E94F73160E084E076
+:1051900090E00E94F73160E085E090E00E94F731F6
+:1051A00060E086E090E00E94F7316FEF87E090E0EA
+:1051B0000C94F73180E090E00E94F13121E08D3EC7
+:1051C0009E4F09F020E0822F089582E090E00C9439
+:1051D000E93183E090E00C94E931682F83E090E0BE
+:1051E0000C94F73184E090E00C94E931682F84E06E
+:1051F00090E00C94F73186E090E00C94E931682F50
+:1052000086E090E00C94F73187E090E00C94E9316F
+:10521000682F87E090E00C94F7318091450480FF7F
+:105220000BC060918B0285E0689FB00111247595D9
+:105230006795759567952BC081FF09C060918B02BA
+:1052400085E0689FB00111247595679520C082FFA5
+:1052500007C060918B0285E0689FB001112417C0E0
+:10526000909146049923D1F060918A02961788F7AD
+:1052700020918B0285E0289F90011124929FA0012C
+:10528000939F500D112470E0CA010E94CF31603805
+:10529000710540F46115710539F002C065E070E0F8
+:1052A000862F08958FE7089581E008958091450441
+:1052B00080FF08C06091890270E0759567957595CB
+:1052C000679521C081FF06C06091890270E07595E5
+:1052D000679519C082FF04C06091890270E010C018
+:1052E000909146049923C1F0609188029617A0F727
+:1052F00080918902899FC001112470E00E94CF3102
+:105300006038710528F46115710521F0862F089524
+:105310008FE7089581E0089561E070E0F4CF803F69
+:1053200021F40E940D29819504C0813F29F40E9437
+:105330000D29809349040895823F21F40E940D298C
+:10534000819504C0833F29F40E940D29809348046D
+:105350000895893F19F40E94562905C08A3F31F407
+:105360000E945629819580934A0408958B3F21F429
+:105370000E945629819504C08C3F29F40E94562929
+:1053800080934B040895843F21F480914704816009
+:1053900017C0853F21F480914704826011C0863F89
+:1053A00021F48091470484600BC0873F21F48091F1
+:1053B0004704886005C0883F31F4809147048061CC
+:1053C0008093470408958D3F21F4809145048160C6
+:1053D0000BC08E3F21F480914504826005C08F3F51
+:1053E00029F4809145048460809345040895803FAA
+:1053F00039F48091490487FF6CC01092490469C058
+:10540000813F29F4809149041816BCF362C0909141
+:105410004804823F29F497FF5CC01092480459C0A9
+:10542000833F19F41916CCF354C0893F41F480919D
+:105430004A0418160CF04DC010924A044AC08A3F24
+:1054400029F480914A0487FF44C0F6CF8B3F39F49A
+:1054500080914B0487FF3DC010924B043AC08C3FB3
+:1054600029F480914B041816BCF333C0843F21F417
+:10547000809147048E7F17C0853F21F480914704B7
+:105480008D7F11C0863F21F4809147048B7F0BC034
+:10549000873F21F480914704877F05C0883F31F41E
+:1054A000809147048F7E8093470413C08D3F21F481
+:1054B000809145048E7F0BC08E3F21F4809145047E
+:1054C0008D7F05C08F3F29F4809145048B7F8093A9
+:1054D00045048091480481110EC0809149048111D6
+:1054E0000AC080914A04811106C080914B04811149
+:1054F00002C010924604089587E494E00E94561B6F
+:105500000E941E28909344048093430408951F939F
+:10551000CF93DF9380914304909144040E942A2802
+:10552000AC0190914604992321F020918C0230E047
+:1055300006C020918D028AE0289F90011124421715
+:10554000530708F486C080914804C0914904D09163
+:105550004A0410914B04811107C0C11176C0D111CA
+:1055600074C0111172C075C09F3F19F09F5F909376
+:105570004604181624F40E940D2980934804809153
+:10558000480487FF05C00E940D2981958093480437
+:105590001C1624F40E940D2980934904809149042B
+:1055A00087FF05C00E940D29819580934904609171
+:1055B0004804662339F1C0914904CC2319F17727B7
+:1055C00067FD7095872F972F0E94F12E23E333E319
+:1055D00043E35FE30E9401300E94BE2E60934804C3
+:1055E0006C2F772767FD7095872F972F0E94F12EDC
+:1055F00023E333E343E35FE30E9401300E94BE2EC6
+:10560000609349041D1624F40E94562980934A048D
+:1056100080914A0487FF05C00E9456298195809396
+:105620004A04111624F40E94562980934B04809159
+:105630004B0487FF05C00E945629819580934B0437
+:10564000DF91CF911F910C947C2A9F3F09F08ECF60
+:1056500096CFDF91CF911F910895E7E4F4E085E0C4
+:10566000DF011D928A95E9F71092460410924504D5
+:105670000895833081F128F4813059F08230D1F0DF
+:105680000895853009F449C0B8F1863009F456C050
+:10569000089580918D02262F30E0280F311D2F3F75
+:1056A000310524F4680F60938D0208958FEF809385
+:1056B0008D02089580918C02262F30E0280F311D35
+:1056C0002F3F310524F4680F60938C0208958FEF0B
+:1056D00080938C02089580918B02262F30E0280F52
+:1056E000311D2F3F310524F4680F60938B0208951C
+:1056F0008FEF80938B02089580918A02262F30E0ED
+:10570000280F311D2F3F310524F4680F60938A0262
+:1057100008958FEF80938A02089580918902262F41
+:1057200030E0280F311D2F3F310524F4680F6093BE
+:10573000890208958FEF80938902089580918802ED
+:10574000262F30E0280F311D2F3F310524F4680F3C
+:105750006093880208958FEF8093880208958330C4
+:1057600011F128F4813049F0823091F008958530AC
+:1057700081F120F18630C1F1089580918D02681782
+:1057800020F4861B80938D02089510928D02089557
+:1057900080918C02681720F4861B80938C020895F8
+:1057A00010928C02089580918B02681720F4861B5A
+:1057B00080938B02089510928B02089580918A0243
+:1057C000681720F4861B80938A02089510928A023B
+:1057D000089580918902681720F4861B80938902BE
+:1057E000089510928902089580918802681720F424
+:1057F000861B8093880208951092880208950F9363
+:105800001F93873208F048C08E3108F094C0803171
+:1058100009F47EC008F5873009F468C068F4863062
+:1058200009F0A4C080913D04817F8E7F80933D0468
+:1058300081E080934D049BC08B3009F490C08E3082
+:1058400009F094C080913D0482FB222720F991E069
+:10585000922790FB82F965C0863109F480C060F41C
+:10586000813109F083C00E945C219091850281E022
+:1058700089278093850273C0893109F470C08B3108
+:1058800009F074C080913D0481FB222720F991E04A
+:10589000922790FB81F945C0883309F460C050F429
+:1058A000893209F45EC0853309F45BC0873209F49C
+:1058B00058C05CC0833409F454C028F48A3308F417
+:1058C00055C0895339C0883409F050C00E945C210A
+:1058D0000E946C060FEF13ED20E3015010402040B2
+:1058E000E1F700C000000E94792839C090913D0482
+:1058F000892F8095817080FB90F929F096609860DF
+:1059000090933D0434C0997F977F90933D0427C0C6
+:1059100080913D0483FB222720F991E0922790FBA0
+:1059200083F980933D049923D1F080913D048160F7
+:1059300080933D0414C08D5141E050E060E070E080
+:105940008A019B0104C0000F111F221F331F8A957B
+:10595000D2F7C901B8010E9418250E945C2181E09C
+:1059600006C061E070E080E090E0F5CF80E01F913C
+:105970000F91089580E0089580E00895CF93C82F97
+:1059800080914D04813069F018F08230C9F184C0F3
+:10599000E0918602F09187028081823209F07EC018
+:1059A00007C0E0918602F09187028081823261F423
+:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7
+:1059C0001DC081E090E01AC08C2F0E94BC2C811178
+:1059D00014C0C43179F048F4CB3079F0C03109F00B
+:1059E00061C082E080934D0408C0C93219F0C83309
+:1059F00021F058C010924D0455C081E0817054C010
+:105A0000C93291F120F5C43179F1B0F4C73009F011
+:105A100047C08EE180938D0282E380938C028AE0FE
+:105A200080938B0284E180938A0288E080938902CC
+:105A300088E28093880234C0CE51C63088F5EC2FBE
+:105A4000F0E0E85AFC4F808180934C0429C0CE34AA
+:105A5000E9F020F4CB3421F56AE013C0C13579F0C8
+:105A6000C235F1F461E00DC080914C04882319F037
+:105A700010924C0415C081E080934D0415C061E084
+:105A800006C080914C040E94392B0AC06AE08091C4
+:105A90004C040E94AF2B04C010924D0480E004C05F
+:105AA00081E002C080E0AACFCF9108950E94DA2859
+:105AB000811102C00E94B6280E94FB2880936804CE
+:105AC00080FF02C0869501C080E00C943005809173
+:105AD0006804982F9695292F30E0233031054CF437
+:105AE0009F5F990F8170892B8160809368040E9469
+:105AF000FF288091680486950C9430058091680495
+:105B0000982F969591F09158990F8170892B8093D9
+:105B100068048E7F91E009F490E08091680490FB26
+:105B200080F9809368040E94FF288091680486951C
+:105B30000C94300580916804982F909590FB80F923
+:105B4000809368040E94FF288091680480FF02C04F
+:105B5000869501C080E00C94300590916804892FEF
+:105B600086958F5F8F779170843028F4880F892B0A
+:105B70008093680402C090936804809168048E7FCB
+:105B800091E009F490E08091680490FB80F98093A3
+:105B900068040E94FF288091680486950C94300563
+:105BA00020916804922F96958927982F990F822F1C
+:105BB0008170892B809368048E7F91E009F490E0D6
+:105BC0008091680490FB80F9809368040E94FF280C
+:105BD0008091680486950C9430055058BB27AA27FD
+:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7
+:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45
+:105C0000D3D180F3BA17620773078407950718F09A
+:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A
+:105C20000B01B90190010C01CA01A0011124FF2749
+:105C3000591B99F0593F50F4503E68F11A16F04044
+:105C4000A22F232F342F4427585FF3CF4695379543
+:105C50002795A795F0405395C9F77EF41F16BA0B08
+:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6
+:105C7000661F771F881FC2F70EC0BA0F621F731FFF
+:105C8000841F48F4879577956795B795F7959E3F5C
+:105C900008F0B3CF9395880F08F09927EE0F9795EA
+:105CA0008795089527D108F481E008950CD06BC141
+:105CB00063D140F05AD130F021F45F3F19F03EC17A
+:105CC000511195C14FC170D198F39923C9F3552350
+:105CD000B1F3951B550BBB27AA27621773078407DF
+:105CE00038F09F5F5F4F220F331F441FAA1FA9F395
+:105CF00033D00E2E3AF0E0E830D091505040E69587
+:105D0000001CCAF729D0FE2F27D0660F771F881FE7
+:105D1000BB1F261737074807AB07B0E809F0BB0BD6
+:105D2000802DBF01FF2793585F4F2AF09E3F5105FA
+:105D300068F004C15CC15F3FECF3983EDCF38695EC
+:105D400077956795B795F7959F5FC9F7880F911D70
+:105D50009695879597F90895E1E0660F771F881F5C
+:105D6000BB1F621773078407BA0720F0621B730B0F
+:105D7000840BBA0BEE1F88F7E095089504D0689461
+:105D8000B11135C1089518D188F09F5790F0B92FFF
+:105D90009927B751A0F0D1F0660F771F881F991F80
+:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035
+:105DB00008951CC1672F782F8827B85F39F0B93F45
+:105DC000CCF3869577956795B395D9F73EF4909582
+:105DD0008095709561957F4F8F4F9F4F0895E89400
+:105DE00009C097FB3EF490958095709561957F4F23
+:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1
+:105E0000F695879577956795B795F111F8CFFAF4E0
+:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11
+:105E200016C0882311F096E911C0772321F09EE86F
+:105E3000872F762F05C0662371F096E8862F70E0D5
+:105E400060E02AF09A95660F771F881FDAF7880FAF
+:105E50009695879597F9089588D018F011F08CD011
+:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4
+:105E7000E7FB6217730784079507A8F199F3E92FE9
+:105E8000FF2788232AF03197660F771F881FDAF7DC
+:105E9000952F5527442332F091505040220F331F45
+:105EA000441FD2F7BB27E91BF50B621B730B840B56
+:105EB000B109C1F222F4620F731F841FB11D319723
+:105EC0002AF0660F771F881FBB1FEFCF91505040FD
+:105ED0005AF041F0882332F0660F771F881F9150E7
+:105EE0005040C1F7939530C08695779567959F5F31
+:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D
+:105F000016161706E807F907C0F012161306E4077D
+:105F1000F50798F0621B730B840B950B39F40A2676
+:105F200061F0232B242B252B21F408950A2609F454
+:105F3000A140A6958FEF811D811D089597F99F6758
+:105F400080E870E060E008959F3F31F0915020F4C8
+:105F5000879577956795B795880F911D9695879545
+:105F600097F908959FEF80EC089500240A9416167F
+:105F7000170618060906089500240A941216130637
+:105F8000140605060895092E0394000C11F48823C5
+:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1
+:105FA0007F4F8F4F9F4F089557FD9058440F551FB7
+:105FB00059F05F3F71F04795880F97FB991F61F08B
+:105FC0009F3F79F087950895121613061406551F02
+:105FD000F2CF4695F1DF08C0161617061806991F6E
+:105FE000F1CF86957105610508940895E894BB2763
+:105FF00066277727CB0197F908957CDF08F48FEFA8
+:1060000008950BD0C0CFB1DF28F0B6DF18F095238C
+:1060100009F094CFA7CF1124EACFC6DFA0F3959F54
+:10602000D1F3950F50E0551F629FF001729FBB277F
+:10603000F00DB11D639FAA27F00DB11DAA1F649F2B
+:106040006627B00DA11D661F829F2227B00DA11DDE
+:10605000621F739FB00DA11D621F839FA00D611D64
+:10606000221F749F3327A00D611D231F849F600D85
+:10607000211D822F762F6A2F11249F5750408AF0BE
+:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A
+:10609000881F91505040A9F79E3F510570F04ECF98
+:1060A000A6CF5F3FECF3983EDCF386957795679536
+:1060B000B795F795E7959F5FC1F7FE2B880F911D68
+:1060C0009695879597F90895FA01EE0FFF1F309680
+:1060D0002105310599F16115710561F48038BFE33F
+:1060E0009B0749F168949038810561F08038BFEFD3
+:1060F0009B0741F0992342F5FF3FE105310521055A
+:1061000011F1E8940894E795D901AA2329F4AB2F5B
+:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4
+:10612000F73950F019F0FF3A38F49F779F930CD06D
+:106130000F9007FC905808953EF014CF60E070E097
+:1061400080E89FE308954FE79F775F934F933F93D6
+:106150002F939ED02F913F914F915F9152DF05C0B9
+:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801
+:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1
+:106180004EDF0F920F920F924DB75EB70F92C0D0B5
+:10619000ECEFF0E016D04F915F91EF91FF91E59514
+:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23
+:1061B000FA95E1F74195550B32D00F9007FE26C0B6
+:1061C0000895DF93CF931F930F93FF92EF92DF9287
+:1061D0007B018C01689405C0DA2EEF011EDFFE0101
+:1061E000E894A5912591359145915591AEF3EF0134
+:1061F00006DDFE019701A801DA9479F7DF90EF90B0
+:10620000FF900F911F91CF91DF9108959B01AC01F9
+:1062100060E070E080E89FE349CD90CE95CECCDE83
+:10622000E8F39923D9F3940F511DBBF391505040DB
+:1062300094F059F0882332F0660F771F881F915031
+:106240005040C1F79E3F510544F7880F911D969528
+:10625000879597F908955F3FACF0983E9CF0BB2777
+:10626000869577956795B79508F4B1609395C1F7D2
+:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70
+:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67
+:1062900093DEC8F39923D1F3C6F3DF93CF931F9313
+:1062A0000F93FF92C92FDD2788232AF02197660FCD
+:1062B000771F881FDAF720E030E040E85FEB9FE3CC
+:1062C000883920F0803E30F021968F7787DCE4E239
+:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197
+:1062E000EC01FB2E6F5771097595771F880B990B81
+:1062F00078DD28E132E741E35FE38FDEAF2D9801DF
+:10630000AE01FF900F911F91CF91DF9178DC3BCED2
+:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497
+:1063200022273327442750781FC0B75188F4AB2F5A
+:106330000024469537952795011CA395D2F300209C
+:1063400069F0220F331F441FB395DAF30DD045CC0B
+:1063500061307105A0E88A07B94630F49B01AC01B1
+:106360006627772788279078309621F0208331831D
+:10637000428353830895AA1BBB1B51E107C0AA1F88
+:10638000BB1FA617B70710F0A61BB70B881F991FD6
+:106390005A95A9F780959095BC01CD01089597FB7A
+:1063A000072E16F4009407D077FD09D00E94BB3168
+:1063B00007FC05D03EF4909581959F4F0895709508
+:1063C00061957F4F0895EE0FFF1F0590F491E02D2A
+:1063D0000994F999FECF92BD81BDF89A992780B5AD
+:1063E0000895A8E1B0E042E050E00C941132262F6D
+:1063F000F999FECF92BD81BDF89A019700B40216BB
+:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68
+:1064100008950196272F0E94F8310C94F731DC0182
+:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F
+:10643000319600B40D9241505040B8F70895F89449
+:02644000FFCF8C
+:106442000C52D02445000000410000DC4400000052
+:106452004152D0A4440000404100005C44000000CE
+:106462004148F17644000000415C978A44000000F4
+:10647200411FD592440000004152D0A444000000C4
+:10648200415CFFB844000000410AA7CF440000006D
+:10649200410000DC44000000410AA7CF4400000094
+:1064A200410000DC440000004100000000000080C8
+:1064B2004000005C450000404100000000000080F8
+:1064C2004052D02445000040410AA7CF44000000BA
+:1064D200410000DC44000000410000000000008098
+:1064E2004052D024450000404100000000000080DE
+:1064F2004000005C45000040410AA7CF4400000074
+:10650200410000DC44000000410000000000008067
+:106512004052D024450000404100000000000080AD
+:10652200400AA74F45000040410AA7CF440000009F
+:10653200410000DC44000000410000000000008037
+:106542004052D024450000004100000000000080BD
+:10655200405CFF3845000000410000000000008060
+:106562004052D02445000000410AA7CF4400000059
+:10657200410000DC440000004100000000000080F7
+:106582004052D024450000804153D02445000040B1
+:106592004160970A450000004154D0A44400000025
+:1065A200410000DC440000004160970A450000A061
+:1065B20041050000003F0000C8424314D114AE144C
+:1065C2007A14461401012A042808140A321E000013
+:1065D200020004000500070009000B000C000E0079
+:1065E2001000110013001500170018001A001C00FB
+:1065F2001D001F002100230024002600280029007E
+:106602002B002D002F0030003200340035003700FF
+:1066120039003B0040004500250026006100600073
+:1066220020003700640065006600670044004600F1
+:10663200240047003149803F5D8B803FF8BF803F97
+:10664200CAE1803F73ED803FCAE1803FF8BF803FDF
+:106652005D8B803F3149803F0000803FF16D7F3F7D
+:1066620075EA7E3F4C827E3F833F7E3F84287E3F99
+:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6
+:106682000000803F3F4D363975092809F208B908E4
+:106692004C0865087E0897080102030405060708EE
+:0266A2000900ED
+:00000001FF