summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--keyboard/ergodox_ez/README.md4
-rw-r--r--keyboard/ergodox_ez/ergodox_ez.c35
-rw-r--r--keyboard/ergodox_ez/ergodox_ez.h9
-rw-r--r--keyboard/ergodox_ez/keymaps/keymap_dave.c195
-rw-r--r--keyboard/ergodox_ez/keymaps/keymap_dave.hex1483
-rw-r--r--keyboard/ergodox_ez/keymaps/keymap_osx_kinesis_pnut.c191
-rw-r--r--keyboard/ergodox_ez/keymaps/keymap_workman_osx_mdw.c366
-rw-r--r--keyboard/planck/keymaps/keymap_gabriel.c25
9 files changed, 2283 insertions, 26 deletions
diff --git a/.gitignore b/.gitignore
index f3f46872a0..bae2658b00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
*.lst
*.map
*.sym
+*.swp
tags
*~
build/
diff --git a/keyboard/ergodox_ez/README.md b/keyboard/ergodox_ez/README.md
index de6b8edf90..27568323b9 100644
--- a/keyboard/ergodox_ez/README.md
+++ b/keyboard/ergodox_ez/README.md
@@ -16,9 +16,9 @@ This requires a little bit of familiarity with coding.
1. Go to https://github.com/jackhumbert/qmk_firmware and read the Readme at the base of this repository, top to bottom. Then come back here :)
2. Clone the repository (download it)
3. Set up a build environment as per https://www.pjrc.com/teensy/gcc.html
-4. Copy keymaps/keymap_default.c into keymaps/your_keymap_name.c
+4. Copy `keymaps/keymap_default.c` into `keymaps/keymap_your_name.c` (for example, `keymaps/keymap_german.c`)
5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly.
-6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_keymap_name`. This will result in a hex file.
+6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. Note that you must omit the `keymap_` prefix for your filename in this command -- for example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name.
6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above.
7. Submit your work as a pull request to this repository, so others can also use it. :)
diff --git a/keyboard/ergodox_ez/ergodox_ez.c b/keyboard/ergodox_ez/ergodox_ez.c
index 78e956a042..d0eaf33923 100644
--- a/keyboard/ergodox_ez/ergodox_ez.c
+++ b/keyboard/ergodox_ez/ergodox_ez.c
@@ -6,12 +6,12 @@ uint8_t mcp23018_status = 0x20;
__attribute__ ((weak))
void * matrix_init_user(void) {
-
+ return NULL;
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
-
+ return NULL;
};
void * matrix_init_kb(void) {
@@ -34,16 +34,20 @@ void * matrix_init_kb(void) {
ergodox_blink_all_leds();
- if (matrix_init_user) {
- (*matrix_init_user)();
- }
+ if (matrix_init_user) {
+ (*matrix_init_user)();
+ }
+
+ return NULL;
};
void * matrix_scan_kb(void) {
- if (matrix_scan_user) {
- (*matrix_scan_user)();
- }
+ if (matrix_scan_user) {
+ (*matrix_scan_user)();
+ }
+
+ return NULL;
};
@@ -51,8 +55,19 @@ void ergodox_blink_all_leds(void)
{
ergodox_led_all_off();
ergodox_led_all_set(LED_BRIGHTNESS_HI);
- ergodox_led_all_on();
- _delay_ms(333);
+ ergodox_right_led_1_on();
+ _delay_ms(50);
+ ergodox_right_led_2_on();
+ _delay_ms(50);
+ ergodox_right_led_3_on();
+ _delay_ms(50);
+ ergodox_right_led_1_off();
+ _delay_ms(50);
+ ergodox_right_led_2_off();
+ _delay_ms(50);
+ ergodox_right_led_3_off();
+ //ergodox_led_all_on();
+ //_delay_ms(333);
ergodox_led_all_off();
}
diff --git a/keyboard/ergodox_ez/ergodox_ez.h b/keyboard/ergodox_ez/ergodox_ez.h
index 3989a2f3ac..aceb7ed9c3 100644
--- a/keyboard/ergodox_ez/ergodox_ez.h
+++ b/keyboard/ergodox_ez/ergodox_ez.h
@@ -34,7 +34,7 @@ void ergodox_blink_all_leds(void);
uint8_t init_mcp23018(void);
uint8_t ergodox_left_leds_update(void);
-#define LED_BRIGHTNESS_LO 31
+#define LED_BRIGHTNESS_LO 15
#define LED_BRIGHTNESS_HI 255
@@ -42,11 +42,13 @@ inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6);
inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); }
inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); }
+inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); }
inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
+inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
inline void ergodox_led_all_on(void)
{
@@ -67,6 +69,11 @@ inline void ergodox_led_all_off(void)
inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; }
inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; }
inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; }
+inline void ergodox_right_led_set(uint8_t led, uint8_t n) {
+ (led == 1) ? (OCR1A = n) :
+ (led == 2) ? (OCR1B = n) :
+ (OCR1C = n);
+}
inline void ergodox_led_all_set(uint8_t n)
{
diff --git a/keyboard/ergodox_ez/keymaps/keymap_dave.c b/keyboard/ergodox_ez/keymaps/keymap_dave.c
new file mode 100644
index 0000000000..a0c74ad805
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/keymap_dave.c
@@ -0,0 +1,195 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define PROG 1 // symbols
+#define NAVI 2 // navigation keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | BkSpce |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | Y | | G | Y | U | I | O | P | Enter |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter |
+ * |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |`/Ctrl| \ | | | LAlt | | RAlt | | [ | ] |'/Ctrl|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | PrtS | Apps | | Paus | CtAl |
+ * ,------+------+------| |------+------+------.
+ * | | | L1 | | L1 | | |
+ * | Spce | ~L2 +------| |------+ ~L1 | Spce |
+ * | | | LGui | | RGui | | |
+ * `--------------------' `--------------------'
+ */
+[BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y,
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H,
+ CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT,
+ KC_PSCREEN, KC_APP,
+ TO(PROG, ON_PRESS),
+ KC_SPC, MO(NAVI), KC_LGUI,
+ // right hand
+ KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC,
+ KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
+ KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+ KC_RALT,KC_NO, KC_LBRC,KC_RBRC, CTL_T(KC_QUOT),
+ KC_PAUS, MT(0x5, KC_NO),
+ TO(PROG, ON_PRESS),
+ KC_RGUI, MO(PROG), KC_SPC
+ ),
+
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | K/ | K* | K- | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | ( | ) | | | | | | | K7 | K8 | K9 | K+ | # |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | { | } | ` |------| |------| | K4 | K5 | K6 | K+ | ' |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | | K1 | K2 | K3 | K= | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | K0 | K0 | K. | K= | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | L2 | | L2 | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[PROG] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ TO(NAVI, ON_PRESS),
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL,
+ KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NUHS,
+ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ TO(NAVI, ON_PRESS),
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Navigation and system keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | Home | Up | End | Ins | PgUp | | | | | | Ins | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | Left | Down | Rght | Del | PgDn |------| |------| | Back | Del | Fwrd | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | Lclk | MsUp | Rclk | | | | | | | Prev | Play | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Powr | Log | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | L0 | | L0 | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[NAVI] = KEYMAP(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN,
+ KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_PWR, LCTL(LALT(KC_DELT)),
+ TO(BASE, ON_PRESS),
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ TO(BASE, ON_PRESS),
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ //[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols)
+ //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void * matrix_init_user(void) {
+ return NULL;
+};
+
+// Runs constantly in the background, in a loop.
+void * matrix_scan_user(void) {
+ /* leds is a static array holding the current brightness of each of the
+ * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and
+ * -1s in the code below, and because wasting a byte really doesn't matter
+ * that much (no, it *doesn't*, stop whinging!). Note that because it's
+ * static it'll maintain state across invocations of this routine.
+ */
+ static uint8_t leds[4];
+ uint8_t led;
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+
+ /* Loop over each LED/layer */
+ for (led = 1; led <= 3; ++led) {
+ /* If the current layer matches the current LED, increment its
+ * brightness by 1 up to a maximum of 255. If the current layer doesn't
+ * match, decrement its brightness by 1 down to a minimum of zero.
+ */
+ leds[led] += (layer == led) ?
+ (leds[led] < 255 ? 1 : 0):
+ (leds[led] > 0 ? -1 : 0);
+ /* Set LED state according to the new brightness */
+ if (leds[led]) {
+ ergodox_right_led_on(led);
+ ergodox_right_led_set(led, leds[led]);
+ }
+ else {
+ ergodox_right_led_off(led);
+ }
+ }
+
+ return NULL;
+};
diff --git a/keyboard/ergodox_ez/keymaps/keymap_dave.hex b/keyboard/ergodox_ez/keymaps/keymap_dave.hex
new file mode 100644
index 0000000000..767a9ca117
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/keymap_dave.hex
@@ -0,0 +1,1483 @@
+:100000000C94FE060C9442070C9442070C94420791
+:100010000C9442070C9442070C9442070C9442073C
+:100020000C9442070C9442070C94B2120C94841363
+:100030000C9442070C9442070C9442070C9442071C
+:100040000C9442070C945C2C0C9442070C944207CD
+:100050000C9442070C9463220C9442070C944207C0
+:100060000C9442070C9442070C9442070C944207EC
+:100070000C9442070C9442070C9442070C944207DC
+:100080000C9442070C9442070C9442070C944207CC
+:100090000C9442070C9442070C9442070C944207BC
+:1000A0000C9442070C9442070C944207E9130B147A
+:1000B000F6140B14F6144D147014F614C514D81459
+:1000C00026182618541854189718D318D41AD41A66
+:1000D000EB18D41AE219E219AE1AD41AD41AC21AB9
+:1000E00029002B00E000E100357100001E00140023
+:1000F00004001D006400E3001F001A0016001B002E
+:1001000000000252200008000700060000002C003A
+:100110002100150009001900E2001151220017000A
+:100120000A0005000000460023001C0000000B0030
+:100130000000650023000A000000050000004800E0
+:1001400024001C000B0011000000007525001800A1
+:100150000D001000E600115126000C000E003600C4
+:1001600000002C00270012000F0037002F00015262
+:100170002D001300330038003000E7002A0028006B
+:100180002800E500347100000100010001000100B9
+:100190000100000001001E022002220201000100F5
+:1001A00001001F02210223020100010001002F02B1
+:1001B00026022F000100010001003002270230005A
+:1001C000010012510100310235003502000001002A
+:1001D0000100010000000100000001000100010019
+:1001E0000000010000000100010001000100010009
+:1001F0000000010000005F005C0059006200125125
+:10020000540060005D005A0062000100550061006A
+:100210005E005B0063000100560057005700580065
+:10022000580001002E0032003400010001000000DF
+:100230000100010001000100010000003A004A0035
+:100240005000F400F20001003B0052005100F000A9
+:10025000F10001003C004D004F00F500F3000100EB
+:100260003D0049004C000100010010513E004B00D0
+:100270004E0001000000A5003F0001000000010049
+:1002800000004C05400001000000010000000100DA
+:1002900041000100010001000000010042000100D6
+:1002A000B600AC00AA001051430049004C00AE005B
+:1002B000A800010044000100B700AB00A900010044
+:1002C00045000100010001000100010001000100E2
+:1002D00001000100010000000A00253031366200F3
+:1002E0003A200025303258000A722F632030313214
+:1002F000333435363738394142434445460A000ADB
+:10030000002530325800626F756E6365213A200017
+:100310006C656674207369646520617474616368D8
+:1003200065640A006C6566742073696465206E6F8D
+:100330007420726573706F6E64696E670A00747200
+:1003400079696E6720746F207265736574206D63C0
+:100350007032333031380A000A44454255473A205A
+:10036000656E61626C65642E0A005B735D004B65AF
+:1003700079626F6172642073746172742E0A005B1B
+:10038000575D005B535D005B525D005B445D005B4D
+:10039000435D0016034500720067006F0044006F64
+:1003A000007800200045005A000000160345007246
+:1003B0000067006F0044006F007800200045005A7D
+:1003C0000000000403090409028D00050100A0FAE1
+:1003D00009040000010301010009211101000122AB
+:1003E0003F000705810308000A0904010001030119
+:1003F0000200092111010001224D000705820308B6
+:10040000000A090402000103000000092111010093
+:10041000012236000705830308000A0904030002CD
+:1004200003000000092111010001222000070584BA
+:100430000320000107050403200001090404000152
+:100440000300000009211101000122390007058580
+:10045000031000011201100100000008EDFE071357
+:1004600001000102000105010906A101050719E0CB
+:1004700029E7150025019508750181020508190174
+:1004800029059505750191029501750391010507EF
+:100490001900297715002501957875018102C0069C
+:1004A00031FF0974A1010975150025FF9520750814
+:1004B00081020976150025FF952075089102C00577
+:1004C000010980A101850216010026B7001A01006A
+:1004D0002AB700751095018100C0050C0901A10122
+:1004E0008503160100269C021A01002A9C02751041
+:1004F00095018100C005010902A1010901A10005C2
+:100500000919012905150025019505750181029537
+:1005100001750381010501093009311581257F9598
+:10052000027508810609381581257F9501750881B6
+:1005300006050C0A38021581257F9501750881068C
+:10054000C0C005010906A101050719E029E715004A
+:10055000250195087501810295017508810105083D
+:100560001901290595057501910295017503910100
+:100570000507190029FF150025FF9506750881005C
+:10058000C00A002530325820006B6579626F6172B5
+:10059000645F7265706F72743A20000A0025303211
+:1005A00058006B6579626F6172645F7365745F6C2C
+:1005B00065643A200064656C5F6B65795F6269749D
+:1005C0003A2063616E27742064656C3A20253032CE
+:1005D000580A006164645F6B65795F6269743A20F0
+:1005E00063616E2774206164643A20253032580AB2
+:1005F00000646F6E652E0A00626F6F676D616769D8
+:1006000063207363616E3A202E2E2E2000290A008B
+:100610002575002F002575005D2800256400200049
+:10062000256400200025640020002564007C00254E
+:10063000303258006D6F7573656B6579205B62743D
+:100640006E7C782079207620685D287265702F6135
+:10065000636C293A205B006D6B5F776865656C5F42
+:1006600074696D655F746F5F6D6178203D202564EE
+:100670000A006D6B5F776865656C5F6D61785F73AD
+:1006800070656564203D2025640A006D6B5F7469A8
+:100690006D655F746F5F6D6178203D2025640A0091
+:1006A0006D6B5F6D61785F7370656564203D2025BB
+:1006B000640A006D6B5F696E74657276616C203DD3
+:1006C0002025640A006D6B5F64656C6179203D20B4
+:1006D00025640A006D6B5F776865656C5F74696D92
+:1006E000655F746F5F6D6178203D2025640A006D41
+:1006F0006B5F776865656C5F6D61785F737065656A
+:1007000064203D2025640A006D6B5F74696D655F30
+:10071000746F5F6D6178203D2025640A006D6B5F0A
+:100720006D61785F7370656564203D2025640A0003
+:100730006D6B5F696E74657276616C203D20256417
+:100740000A006D6B5F64656C6179203D2025640A49
+:10075000000A00257500363A20776865656C5F747D
+:10076000696D655F746F5F6D61783A20000A0025DE
+:100770007500353A20776865656C5F6D61785F73E9
+:10078000706565643A20000A00257500343A2074CB
+:10079000696D655F746F5F6D61783A20000A0025AE
+:1007A0007500333A206D61785F73706565643A2037
+:1007B000000A00257500323A20696E746572766110
+:1007C0006C286D73293A20000A00257500313A2003
+:1007D00064656C6179282A31306D73293A20000AEA
+:1007E000092D2056616C756573202D0A004D3E0061
+:1007F0004D25643E20003F0073657420646566618A
+:10080000756C740A00433E20007768657265206449
+:10081000656C74613A20637572736F723D25642C48
+:1008200020776865656C3D25640A536565206874AA
+:1008300074703A2F2F656E2E77696B6970656469E5
+:10084000612E6F72672F77696B692F4D6F757365B6
+:100850005F6B6579730A000A092D204D6F7573650A
+:100860006B6579202D0A4553432F713A09717569DB
+:10087000740A313A0964656C6179282A31306D73E4
+:10088000290A323A09696E74657276616C286D7353
+:10089000290A333A096D61785F73706565640A34BB
+:1008A0003A0974696D655F746F5F6D61780A353AF6
+:1008B00009776865656C5F6D61785F737065656405
+:1008C0000A363A09776865656C5F74696D655F74AF
+:1008D0006F5F6D61780A0A703A097072696E7420F0
+:1008E00076616C7565730A643A0973657420646592
+:1008F0006661756C74730A75703A092B310A646FFE
+:10090000776E3A092D310A706775703A092B3130CC
+:100910000A7067646F776E3A092D31300A0A737076
+:10092000656564203D2064656C7461202A206D61DA
+:10093000785F7370656564202A2028726570656130
+:1009400074202F2074696D655F746F5F6D61782905
+:100950000A003F004D3E2000433E20004C25640A23
+:10096000000A092D20436F6E736F6C65202D0A45B8
+:1009700053432F713A09717569740A6D3A096D6FA5
+:100980007573656B65790A000A092D204D616769E9
+:1009900063202D0A643A0964656275670A783A092A
+:1009A0006465627567206D61747269780A6B3A09D3
+:1009B0006465627567206B6579626F6172640A6D48
+:1009C0003A096465627567206D6F7573650A763ADA
+:1009D0000976657273696F6E0A733A09737461748C
+:1009E00075730A633A09636F6E736F6C65206D6F80
+:1009F00064650A302D343A096C61796572302D34A2
+:100A0000284631302D4634290A506175733A0962FF
+:100A10006F6F746C6F616465720A653A0965657021
+:100A2000726F6D0A6E3A094E4B524F0A7A3A097349
+:100A30006C656570204C454420746573740A000A27
+:100A4000002575002E6E6B726F3A20000A00257526
+:100A5000002E737761705F6261636B736C617368A2
+:100A60005F6261636B73706163653A20000A002501
+:100A700075002E737761705F67726176655F65736D
+:100A8000633A20000A002575002E6E6F5F67756956
+:100A90003A20000A002575002E737761705F72613D
+:100AA0006C745F726775693A20000A002575002E24
+:100AB000737761705F6C616C745F6C6775693A2005
+:100AC000000A002575002E636170736C6F636B5FA5
+:100AD000746F5F636F6E74726F6C3A20000A00254A
+:100AE00075002E737761705F636F6E74726F6C5FE9
+:100AF000636170736C6F636B3A20000A00253032BB
+:100B000058006B65796D61705F636F6E6669672E03
+:100B10007261773A20000A002575002E6D6F75739B
+:100B2000653A20000A002575002E6B6579626F61B9
+:100B300072643A20000A002575002E6D6174726996
+:100B4000783A20000A002575002E656E61626C659A
+:100B50003A20000A00253032580064656275675FEC
+:100B6000636F6E6669672E7261773A20000A00250E
+:100B7000750064656661756C745F6C617965723A65
+:100B800020003F004E4B524F3A206F66660A004EDF
+:100B90004B524F3A206F6E0A0074696D65725F6345
+:100BA0006F756E743A202530346C580A006B657985
+:100BB000626F6172645F6E6B726F3A2025580A0033
+:100BC0006B6579626F6172645F69646C653A202558
+:100BD000580A006B6579626F6172645F70726F743E
+:100BE0006F636F6C3A2025580A00686F73745F6BEF
+:100BF0006579626F6172645F6C65647328293A205D
+:100C000025580A000A092D20537461747573202D2C
+:100C10000A004743433A20342E382E3220415652A0
+:100C20002D4C4942433A20312E382E302041565225
+:100C30005F415243483A20617672350A004F505462
+:100C4000494F4E533A204C55464120424F4F544D48
+:100C500041474943204D4F5553454B455920455831
+:100C60005452414B455920434F4E534F4C4520431E
+:100C70004F4D4D414E44204E4B524F203531320A9C
+:100C8000004255494C443A203135316565303420B5
+:100C90002832303A35393A343720446563203230CF
+:100CA0002032303135290A005649443A20307846FE
+:100CB000454544284572676F446F7820455A29207E
+:100CC0005049443A20307831333037284572676FC5
+:100CD000446F7820455A29205645523A20307830C2
+:100CE0003030310A00444553433A20742E6D2E6B48
+:100CF0002E206B6579626F617264206669726D7710
+:100D000061726520666F72204572676F646F780A42
+:100D1000000A092D2056657273696F6E202D0A0036
+:100D20000A6D6F7573653A206F66660A000A6D6F0B
+:100D30007573653A206F6E0A000A6B6579626F61A0
+:100D400072643A206F66660A000A6B6579626F61A9
+:100D500072643A206F6E0A000A6D61747269783AA3
+:100D6000206F66660A000A6D61747269783A206FB6
+:100D70006E0A000A64656275673A206F6E0A000A9F
+:100D800064656275673A206F66660A000A0A626FD8
+:100D90006F746C6F616465722E2E2E2000433E20AE
+:100DA000006565636F6E6669673A0A00536C656536
+:100DB00070204C454420746573740A0000000000E4
+:100DC00000000000000000010204060A0F17202C9A
+:100DD0003A4A5D71879DB3C7DAE9F5FCFFFCF5E996
+:100DE000DAC7B39D87715D4A3A2C20170F0A0604B3
+:100DF00002010000000000000000000011241FBEDE
+:100E0000CFEFDAE0DEBFCDBF04B603FE24C0809191
+:100E1000FD019091FE01A091FF01B0910002873089
+:100E2000904BA740B04BB9F41092FD011092FE0117
+:100E30001092FF011092000214BE84B7877F84BF16
+:100E400088E10FB6F89480936000109260000FBEA6
+:100E5000E0E0FFE3099511E0A0E0B1E0E4E5FCE5A6
+:100E600002C005900D92AA33B107D9F711E0AAE3A9
+:100E7000B1E001C01D92AD3FB107E1F70E94EC0F58
+:100E80000C94282E0C940000FF93EF93E0913A010C
+:100E9000F0913B01309709F00995EF91FF9108958A
+:100EA000FC018591803011F0EFDFFBCF0895FF2723
+:100EB000E0E230E247FF0CC0419597FF09C0EDE248
+:100EC0006095709580959095611D711D811D911D96
+:100ED00027FF02C0219530E350E2AA27660F771F53
+:100EE000881F991FAA1FA41710F0A41B63955A9579
+:100EF000A9F7AA3008F0A95FA05DAF93F39561153B
+:100F000071058105910541F7ED3211F4EF93F395E9
+:100F1000F21718F43F93F395FBCF8F91B5DFFA9555
+:100F2000E1F70895E991F9918591803021F08532BA
+:100F300019F0AADFF9CF089520E0E89455915532D1
+:100F4000C1F3503311F4689455915A3348F4505317
+:100F500090F3220F022E220F220F200D250FF4CF27
+:100F60000EF4219589919991533619F3533729F14C
+:100F7000533559F1BC0188279927E8945C3621F450
+:100F80008991999168945591543639F446EF7EF0E1
+:100F900077FF0DC08FEF9FEF0AC055374AE039F059
+:100FA000583540E121F0523642E009F00895FF93B0
+:100FB000EF937DDFEF91FF91B7CFFF93EF93FC01AC
+:100FC00081918030B9F360DFFBCFFF93EF9368DF4F
+:100FD000F1CFDF93CF93CDB7DEB72596A3DFCF91C7
+:100FE000DF91089561110BC0FC018281882321F0FB
+:100FF00085EE0E94BA1603C085EE0E94821780E03B
+:1010000090E0089580E090E00895EF92FF921F93A2
+:10101000CF93DF936091C0017091C1018091C201B3
+:101020009091C3010E94672156985E9821E030E0BC
+:10103000682F70E0EB01C45CDE4FE1E0F0E0122FBE
+:10104000821307C0AB019881A1E09F3F61F4A0E04B
+:101050000AC0A901D901A45CBE4F9C91A1E09111E5
+:1010600001C0A0E0A1959A0FDA01A45CBE4F9C9349
+:101070004C5F5F4F992309F194B17F0102C0EE0CE0
+:10108000FF1C4A95E2F79E2994B995B19E2995B91E
+:101090004C9150E0113029F450938900409388001E
+:1010A0001AC0123029F450938B0040938A0013C069
+:1010B00050938D0040938C000EC094B1DF0102C0AC
+:1010C000AA0FBB1F4A95E2F7AD014095942394B94E
+:1010D00095B1942395B92F5F3F4F2430310509F026
+:1010E000AECF80E090E0DF91CF911F91FF90EF9025
+:1010F000089585E098E0892B11F00E94050880E0B2
+:1011000090E0089556985E9825982D9826982E98E8
+:1011100027982F988FEF90E0909389008093880014
+:1011200090938B0080938A0090938D0080938C0025
+:10113000259A2D9A2FEF80E792E021508040904031
+:10114000E1F700C00000269A2E9A2FEF80E792E088
+:10115000215080409040E1F700C00000279A2F9A6C
+:101160002FEF80E792E0215080409040E1F700C0EF
+:10117000000025982D982FEF80E792E021508040C5
+:101180009040E1F700C0000026982E982FEF80E7EE
+:1011900092E0215080409040E1F700C00000279885
+:1011A0002F9856985E9825982D9826982E982798CF
+:1011B0002F98089589EA8093800089E080938100C8
+:1011C00024982C983F988AB18F748AB96E98479A60
+:1011D0008BB1806B8BB9769A0E94820882E098E08E
+:1011E000892B11F00E94020880E090E0089580E2CF
+:1011F000809300018091400181110EC00E94460938
+:1012000081E0809340012FEF83ED90E321508040F7
+:101210009040E1F700C0000080E40E944C098093F8
+:10122000000181112EC00E94760980930001811176
+:1012300028C00E94760980930001811122C08FE3AB
+:101240000E9476098093000181111BC00E946E09E3
+:1012500080E40E944C0980930001811112C08CE04F
+:101260000E9476098093000181110BC00E947609CB
+:1012700080930001811105C08FE30E94760980935D
+:1012800000010E946E098091000108951092B9003A
+:101290008AE08093B800089594EA9093BC009091FE
+:1012A000BC0097FFFCCF9091B900987F983021F057
+:1012B000903111F081E008958093BB0084E8809321
+:1012C000BC008091BC0087FFFCCF8091B900887F73
+:1012D000883111F0803471F780E0089584E98093BB
+:1012E000BC008091BC0084FDFCCF08958093BB00BE
+:1012F00084E88093BC008091BC0087FFFCCF909174
+:10130000B900987F81E0983209F480E0089584E87C
+:101310008093BC008091BC0087FFFCCF8091BB0014
+:10132000089580910001811115C080E40E944C094C
+:101330008093000181110CC082E10E9476098093A4
+:101340000001811105C08FEF0E9476098093000192
+:101350000E946E0984B1807F84B985B1807F85B990
+:101360008AB1837F8AB98BB1837F8BB93E984698C7
+:1013700008950E94F708809300010E94910980B3AC
+:101380008C7080BB81B3836F81BBE0E5F1E0A2E4A8
+:10139000B1E011921D9281E0EE35F807D1F78AEDA8
+:1013A00098E0892B11F00C94DA0808959F92AF927F
+:1013B000BF92CF92DF92EF92FF920F931F93CF9342
+:1013C000DF93809100018823E1F0809141018F5FDC
+:1013D00080934101811115C08EE393E00E94500774
+:1013E0000E94F70880930001882329F084E293E0AB
+:1013F0000E94500706C080E193E00E9450070E94BF
+:10140000820802E411E0C0E0D0E0BB24B39482E0A3
+:10141000A82ECC24C394D12C21E0E22E23E0F22E7E
+:10142000C73000F580910001811162C080E40E9404
+:101430004C0980930001811112C082E10E9476095B
+:101440008093000181110BC0C6010C2E01C0880FD2
+:101450000A94EAF780950E947609809300010E9421
+:101460006E0946C0CA30A1F028F4C83059F0C9301E
+:1014700061F005C0CC3089F070F0CD3089F0209A51
+:10148000289810C0219A29980DC0229A2A980AC03B
+:10149000239A2B9807C0529A01C0539A5B9802C0B6
+:1014A0003E9A4698E0EAEA95F1F78FB1799985C0BE
+:1014B00092E081708B25892B7C9B02C090E001C05B
+:1014C00094E0892B7D9B02C090E001C098E0892BBD
+:1014D0007E9B02C090E001C090E1892B9FB1909566
+:1014E000991F9927991F9295990F907E892B10C06B
+:1014F00080910001811176C080E40E944C098093A4
+:101500000001882309F45BC0912C0E946E09892D8B
+:10151000F8019081981739F1808380910101882327
+:1015200001F18091DB0180FF04C086E093E00E941E
+:1015300050078091DB0180FF0CC0809101011F9258
+:101540008F93FF92EF920E94E9070F900F900F90F8
+:101550000F908091DB0180FF04C08FEF92E00E942A
+:101560005007A09201010E94910921960F5F1F4F21
+:10157000CE30D10509F054CF809101018823B1F01C
+:10158000815080930101882339F08FE99FE0019712
+:10159000F1F700C000000AC0A0E5B1E0E2E4F1E02C
+:1015A00081918D9391E0E035F907D1F789E798E0D3
+:1015B000892BD1F00E94790817C090E07ACF83E19F
+:1015C0000E9476098093000181119ECF81E40E94E0
+:1015D0004C0980930001811197CF0E948709982EB2
+:1015E000909493CF80E094CF81E0DF91CF911F91D1
+:1015F0000F91FF90EF90DF90CF90BF90AF909F90B2
+:101600000895E82FF0E0E05BFE4F80810895CF92CF
+:10161000DF92EF92FF920F931F93CF93DF9388EEA9
+:1016200092E00E94500730E5E32E31E0F32EC0E057
+:10163000D0E043EEC42E42E0D42E0AED12E0DF9358
+:10164000CF93DF92CF920E94E90780EE92E00E9452
+:101650005007F70181917F0190E00E94CC219F9378
+:101660008F931F930F930E94E90788ED92E00E94E9
+:10167000500721968DB79EB708960FB6F8949EBF77
+:101680000FBE8DBFCE30D105D1F6DF91CF911F9126
+:101690000F91FF90EF90DF90CF9008958B3B9105D5
+:1016A00078F4883A910540F5853A9105D0F4843074
+:1016B000910508F0B1C08130910509F4ADC06BC04F
+:1016C000803E910508F467C0883E910508F4A4C0E7
+:1016D0009C01205F31092031310508F05CC0906524
+:1016E0000895853A910509F459C0863A910509F49F
+:1016F00058C083E890E40895883A910509F454C0ED
+:10170000893A910509F453C08A3A910509F452C007
+:101710008B3A910509F451C08C3A910509F450C0F7
+:101720008D3A910509F44FC0803B910509F44EC0F4
+:101730008E3A910509F44DC08F3A910509F44CC0D9
+:10174000813B910509F44BC0823B910509F44AC0E5
+:10175000833B910509F449C0843B910509F448C0D5
+:10176000853B910509F447C0863B910509F446C0C5
+:10177000873B910509F445C0883B910509F444C0B5
+:10178000893B910509F443C08A3B910509F042C0A9
+:101790008AE296E4089580E090E0089581E890E47C
+:1017A000089582E890E4089582EE94E4089589EE25
+:1017B00094E408958AEE94E4089585EB94E4089502
+:1017C00086EB94E4089587EB94E408958CEC94E41C
+:1017D00008958DEC94E4089583E895E408958AE8EB
+:1017E00095E4089582E995E4089584E995E40895DF
+:1017F00081E296E4089583E296E4089584E296E413
+:10180000089585E296E4089586E296E4089587E2D5
+:1018100096E4089580E094E40895089596E0799F11
+:10182000F001112494E5899FE00DF11D1124E60FCC
+:10183000F11DEE0FFF1FE052FF4F85919491089527
+:10184000880F991F805A9040FC01859194910895CA
+:10185000880F991F80529F4FFC01859194910895A4
+:1018600026E0729FF001112444E5849FE00DF11DF4
+:101870001124E60FF11DEE0FFF1FE052FF4F2591DF
+:101880003491C9019A9581159F4110F4C9010895B9
+:10189000C90190528115904128F4C9019F700E949E
+:1018A000280C0895C90190538115904120F4C90175
+:1018B0009927906C0895211580E5380769F40E94F6
+:1018C000F51A9FEF24E34CE0915020404040E1F7AF
+:1018D00000C000000C948822213080E5380751F4C4
+:1018E00088E593E00E9450078091DB01816080933E
+:1018F000DB010895C90190558115904108F050C051
+:10190000832F99278F70992781309105D9F4A901E8
+:101910004370552702C0880F991F4A95E2F79C68CB
+:10192000A90164E0440F551F6A95E1F744275370FD
+:10193000842B952B73E0220F331F7A95E1F72076E5
+:1019400033271DC08230910529F4922F8827816F9B
+:10195000906A089583309105A9F4A9014370552731
+:1019600081E090E002C0880F991F4A95E2F79C68D9
+:1019700043E0220F331F4A95E1F7207E3770822B18
+:10198000932B08950497F1F4A9014370552781E042
+:1019900090E002C0880F991F4A95E2F79A68E8CF55
+:1019A000C90190578115904120F4C9019F70906240
+:1019B0000895C90190588115904120F4C9019F7084
+:1019C000906A0895203E3105E0F4203C310558F539
+:1019D0002133310509F470C048F42932310509F486
+:1019E00064C02A32310509F46EC074C02933310550
+:1019F000F1F022383105D9F02533310509F44EC014
+:101A000069C0233E310589F138F4203E3105C1F02B
+:101A1000223E3105E1F05EC0263E310569F1273EE8
+:101A20003105A9F157C0C9010E94200C0895809189
+:101A3000EE0180FD02C081FF4DC080EE90E04BC002
+:101A40008091EE0180FFF9CF89E390E044C080915E
+:101A5000EE0182FF0EC08091EE0184FF03C080E0A2
+:101A600090E039C083EE90E036C08091EE0182FFB5
+:101A7000F2CF82EE90E02FC08091EE0183FF0BC089
+:101A80008091EE0184FDEBCF87EE90E024C0809141
+:101A9000EE0183FFF5CF86EE90E01DC08091EE0150
+:101AA00085FF07C089E290E016C08091EE0185FFB6
+:101AB000F9CF85E390E00FC08091EE0186FF07C06B
+:101AC0008AE290E008C08091EE0186FFF9CF81E3C1
+:101AD00090E001C0C9010E944E0B089508958091C5
+:101AE000710108959FB7F894109260019FBF909183
+:101AF000F401943009F058C09091E9009F70209152
+:101B0000EC0020FF02C020E801C020E0292B94E077
+:101B10009093E9009091EB0090FF43C09091EE000C
+:101B200097FF3FC090915E01992321F09091E800CA
+:101B300095FF37C010925E0196E03091E80035FDC8
+:101B400015C03091F401343061F53091EB0035FD72
+:101B500028C0915021F481E080935E0122C0EFE91A
+:101B6000FFE03197F1F700C00000E7CF8093F1006C
+:101B70008091E80085FD0AC08091E80080FFFCCFDD
+:101B80008091E8008E778093E80006C08FB7F894C4
+:101B900091E0909360018FBF2F702093E90080E067
+:101BA00008952F702093E9008FEF0895CF93DF936E
+:101BB00000D01F92CDB7DEB72091F401243019F583
+:101BC00023E029839B838A832093E9008FEF909100
+:101BD000E800815095FD06C095ED9A95F1F700005B
+:101BE0008111F5CF8091E80085FF0DC040E050E005
+:101BF00063E070E0CE0101960E94A5108091E8009C
+:101C00008E778093E8000F900F900F90DF91CF9127
+:101C10000895CF93DF9300D01F92CDB7DEB7209108
+:101C2000F401243021F522E029839B838A8383E019
+:101C30008093E9008FEF9091E800815095FD06C0F8
+:101C400095ED9A95F1F700008111F5CF8091E800AC
+:101C500085FF0DC040E050E063E070E0CE010196EA
+:101C60000E94A5108091E8008E778093E8000F9085
+:101C70000F900F90DF91CF9108952091F4012430BF
+:101C8000F1F422E02093E9002FEF3091E800215099
+:101C900035FD06C035ED3A95F1F700002111F5CF7D
+:101CA0002091E80025FF0BC040E050E065E070E0C7
+:101CB0000E94A5108091E8008E778093E800089537
+:101CC000CF93DF93EC018091F401843009F047C099
+:101CD00080910C018823E1F080910D018823C1F0EF
+:101CE00085E08093E9008FEF9091E800815095FDA9
+:101CF00006C095E19A95F1F700008111F5CF80912A
+:101D0000E80085FF2CC040E050E060E170E017C0C3
+:101D100081E08093E9008FEF9091E800815095FD7C