summaryrefslogtreecommitdiff
path: root/keyboard
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard')
-rw-r--r--keyboard/ergodox_ez/keymaps/alexjj/keymap.c238
-rw-r--r--keyboard/ergodox_ez/keymaps/alexjj/keymap.hex1141
-rw-r--r--keyboard/ergodox_ez/keymaps/alexjj/readme.md179
-rw-r--r--keyboard/ergodox_ez/keymaps/alexjj/rl-layout.jpgbin0 -> 833107 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.pngbin95077 -> 94771 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt6
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/readme.md60
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c6
-rw-r--r--keyboard/preonic/keymaps/nerdgasm/README.md34
-rw-r--r--keyboard/preonic/keymaps/nerdgasm/keymap.c117
-rw-r--r--keyboard/preonic/preonic.c9
-rw-r--r--keyboard/preonic/preonic.h1
12 files changed, 1780 insertions, 11 deletions
diff --git a/keyboard/ergodox_ez/keymaps/alexjj/keymap.c b/keyboard/ergodox_ez/keymaps/alexjj/keymap.c
new file mode 100644
index 0000000000..448f62da02
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/alexjj/keymap.c
@@ -0,0 +1,238 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define UNIC 3 // unicode entry layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ |
+ * |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
+ * | Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" |
+ * |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
+ * | LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 |
+ * ,------|------|------| |------+------+------.
+ * | | | PgUp | | Ins | | |
+ * | Enter| BkSp |------| |------| ~L1 |Space |
+ * | | | PgDn | | Del | | |
+ * `--------------------' `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[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_LBRC,
+ KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_HOME,
+ KC_LCTRL, LCTL(KC_C), LCTL(KC_V), KC_LEFT,KC_RGHT,
+ KC_FN3, KC_F5,
+ KC_PGUP,
+ KC_ENT,KC_BSPC,KC_PGDN,
+ // right hand
+ KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
+ KC_END, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+ KC_DOWN,KC_UP, ALL_T(KC_NO),KC_GRV, KC_RCTRL,
+ KC_F2, KC_FN2,
+ KC_INS,
+ KC_DELT,KC_FN1, KC_SPC
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr|
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | £ | | | | | | . | 0 | = |Alt+F4|
+ * `----------------------------------' `----------------------------------'
+ * ↑ ,-------------. ,-------------.
+ * THERE! | | | | | |
+ * ,------|------|------| |------+------+------.
+ * CAD = Ctrl + Alt + Delete | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | CAD | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ 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,M(3),KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, LALT(KC_F4),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ LCTL(LALT(KC_DEL)), KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | TEENSY | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ 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, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+/* Keymap 3: Unicode Entry
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Alt | | | E | | | | | | | 7 | 8 | 9 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Alt | | | C | | B | | | | | 1 | 2 | 3 | + | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * WINDOWS ONLY SETUP!! | ~L3 | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | Alt | Alt |------| |------| Alt | Alt |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[UNIC] = KEYMAP( // layer 3 : Unicode Entry
+ // left hand
+ KC_LALT, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6,
+ KC_LALT, KC_TRNS, KC_TRNS, KC_E, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LALT, KC_A, KC_TRNS, KC_D, KC_F, KC_TRNS,
+ KC_LALT, KC_TRNS, KC_TRNS, KC_C, KC_TRNS, KC_B, KC_TRNS,
+ KC_LALT, KC_LALT, KC_LALT, KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_LALT,KC_LALT, KC_TRNS,
+ // right hand
+ KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS,KC_PPLS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TRNS,
+ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_TRNS,
+ KC_P0, KC_P0, KC_P0, KC_PPLS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_LALT, KC_LALT
+ ),
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
+ [2] = ACTION_LAYER_TAP_TOGGLE(MDIA), // FN2 - Momentary Layer 2 (Media)
+ [3] = ACTION_LAYER_TAP_TOGGLE(UNIC) // FN3 - Momentary Layer 3 (Unicode entry)
+};
+
+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);
+ }
+ case 3: // this would trigger when you hit a key mapped as M(3)
+ if (record->event.pressed) {
+ return MACRO( I(255), D(LALT), T(P1), T(P5), T(P6), U(LALT), END );
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboard/ergodox_ez/keymaps/alexjj/keymap.hex b/keyboard/ergodox_ez/keymaps/alexjj/keymap.hex
new file mode 100644
index 0000000000..13338a8922
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/alexjj/keymap.hex
@@ -0,0 +1,1141 @@
+:100000000C94C5020C940C030C940C030C940C037C
+:100010000C940C030C940C030C940C030C940C0324
+:100020000C940C030C940C030C94380C0C940A0DD7
+:100030000C940C030C940C030C940C030C940C0304
+:100040000C940C030C94AC210C940C030C940C0336
+:100050000C940C030C94381B0C940C030C940C03A0
+:100060000C940C030C940C030C940C030C940C03D4
+:100070000C940C030C940C030C940C030C940C03C4
+:100080000C940C030C940C030C940C030C940C03B4
+:100090000C940C030C940C030C940C030C940C03A4
+:1000A0000C940C030C940C030C940C03770D990D19
+:1000B0008C0E990D8C0EDE0D010E8C0E560E690EF7
+:1000C0005D115D118C118C11CF11091216141614CB
+:1000D0002212161417131713EA1316141614011408
+:1000E00075FF01E201590259015D025D015E025E88
+:1000F00002E2000000F0A1F0A2F0A329002B00E32F
+:1001000000E100E00000001E00140004001D740661
+:10011000014E001F001A0016001B0019012A0020C2
+:100120000008000700060050002800210015000903
+:100130000019004F004B00220017000A00050000C4
+:1001400000C30023002F0000004A0000003E0024EE
+:1001500000300000004D0000003B0025001C000B9B
+:100160000011000000C200260018000D0010005110
+:1001700000490027000C000E00360052002C002D14
+:100180000012000F003700007FC1002E0013003363
+:1001900000380035004C002A0031003400E500E44E
+:1001A0000000000100010001000100010000003A10
+:1001B000001E0220022202033001003B001F022128
+:1001C000022302010001003C002F0226022F000141
+:1001D0000001003D00300227023000010001003E16
+:1001E00000310235003502000001003F000100002F
+:1001F00000010000000100400001000000010000BB
+:1002000000010041005200510024020000010042A0
+:1002100000240021001E00010001004300250022EF
+:10022000001F0037000100440026002300200027A3
+:10023000000100450025022E0231002E004C05462B
+:10024000000100010001003D040000005001000118
+:100250000001000100000001000100010001000197
+:1002600000010001000100F2000100010001000195
+:1002700000F000F1000100F400010001000100F3B2
+:10028000000100F500010001000100010001000073
+:100290000001000100010000000100000001000158
+:1002A0000001000000010000000100010001000148
+:1002B000000100000001000100010001000100AA8E
+:1002C000000100010001000100AC00A900B600011E
+:1002D0000001000100AB00A80001000100010001C5
+:1002E0000001000100010001000100AE0001000159
+:1002F000000000E200E200E200E200E2000000593B
+:1003000000010004000100E20001005A00010001A8
+:10031000000100E200E2005B0008000700060001A7
+:1003200000E2005C00010009000100010001005D25
+:1003300000010001000500000001005E0001000056
+:10034000000100000001005F00010000000100004A
+:1003500000010060000100010001000000010061D7
+:10036000005F005C00590062000100620060005DF7
+:10037000005A006200E200570061005E005B00620C
+:1003800000E20057005700570057005700010001D6
+:100390000001000100010001000000160345007289
+:1003A0000067006F0044006F007800200045005A8D
+:1003B00000000016034500720067006F0044006FE4
+:1003C000007800200045005A0000000403090409D9
+:1003D000026D00040100A0FA0904000001030101FC
+:1003E00000092111010001223F00070581030800D7
+:1003F0000A090401000103010200092111010001A1
+:10040000224D000705820308000A090402000103C7
+:1004100000000009211101000122360007058303B5
+:1004200008000A090403000103000000092111016A
+:100430000001223900070584031000011201100198
+:1004400000000008EDFE0713010001020001050194
+:100450000906A101050719E029E7150025019508FE
+:10046000750181020508190129059505750191029B
+:1004700095017503910105071900297715002501DC
+:10048000957875018102C005010980A101850216D8
+:10049000010026B7001A01002AB7007510950181E6
+:1004A00000C0050C0901A1018503160100269C026C
+:1004B0001A01002A9C02751095018100C0050109EE
+:1004C00002A1010901A1000509190129051500254D
+:1004D00001950575018102950175038101050109E9
+:1004E0003009311581257F95027508810609381577
+:1004F00081257F950175088106050C0A3802158152
+:10050000257F950175088106C0C005010906A10176
+:10051000050719E029E715002501950875018102F5
+:1005200095017508810105081901290595057501D1
+:1005300091029501750391010507190029FF150026
+:1005400025FF950675088100C0000000000000002E
+:1005500000000000010204060A0F17202C3A4A5D31
+:1005600071879DB3C7DAE9F5FCFFFCF5E9DAC7B39B
+:100570009D87715D4A3A2C20170F0A06040201007C
+:100580000000000000000000000011241FBECFEF9B
+:10059000DAE0DEBFCDBF04B603FE27C08091EE01D6
+:1005A0009091EF01A091F001B091F1018730904B53
+:1005B000A740B04BD1F41092EE011092EF011092CF
+:1005C000F0011092F10114BE84B7877F84BF0FB68B
+:1005D000F894A895809160008861809360001092E3
+:1005E00060000FBEE0E0FFE3099511E0A0E0B1E09C
+:1005F000EAEFF6E402C005900D92A433B107D9F7F3
+:1006000021E0A4E3B1E001C01D92AE3EB207E1F7E4
+:100610000E947F090C947B230C940000CF93DF93FE
+:10062000EC01662319F0633059F00DC08A818823EC
+:1006300021F085EE0E94EE0F03C085EE0E94B610F9
+:100640008A81811103C080E090E002C080EE90E0DA
+:10065000DF91CF91089508956091B1017091B20139
+:100660008091B3019091B4010E94621A56985E98ED
+:1006700025982D9826982E9827982F98823039F013
+:10068000833041F0813041F4259A2D9A0895269ABD
+:100690002E9A0895279A2F9A08950C942C03569811
+:1006A0005E9825982D9826982E9827982F988FEF4A
+:1006B00090E0909389008093880090938B008093C2
+:1006C0008A0090938D0080938C00259A2D9A2FEFAD
+:1006D00080E792E0215080409040E1F700C00000A8
+:1006E000269A2E9A2FEF80E792E02150804090408A
+:1006F000E1F700C00000279A2F9A2FEF80E792E0E1
+:10070000215080409040E1F700C0000025982D98CE
+:100710002FEF80E792E0215080409040E1F700C049
+:10072000000026982E982FEF80E792E0215080401D
+:100730009040E1F700C0000027982F9856985E98E7
+:1007400025982D9826982E9827982F98089589EA0D
+:100750008093800089E08093810024982C983F98B2
+:100760008AB18F748AB96E98479A8BB1806B8BB9B6
+:10077000769A0E944F030C942B0380E28093000131
+:100780008091340181110EC00E940C0481E080939D
+:1007900034012FEF83ED90E3215080409040E1F74A
+:1007A00000C0000080E40E941204809300018111C7
+:1007B0002EC00E943C0480930001811128C00E9439
+:1007C0003C0480930001811122C08FE30E943C040D
+:1007D0008093000181111BC00E94340480E40E94B8
+:1007E000120480930001811112C08CE00E943C042D
+:1007F0008093000181110BC00E943C048093000192
+:10080000811105C08FE30E943C04809300010E9487
+:1008100034048091000108951092B9008AE0809319
+:10082000B800089594EA9093BC009091BC0097FFA3
+:10083000FCCF9091B900987F983021F0903111F061
+:1008400081E008958093BB0084E88093BC00809190
+:10085000BC0087FFFCCF8091B900887F883111F000
+:10086000803471F780E0089584E98093BC00809122
+:10087000BC0084FDFCCF08958093BB0084E8809386
+:10088000BC008091BC0087FFFCCF9091B900987F9D
+:1008900081E0983209F480E0089584E88093BC00F8
+:1008A0008091BC0087FFFCCF8091BB0008958091B0
+:1008B0000001811115C080E40E94120480930001A0
+:1008C00081110CC082E10E943C04809300018111DF
+:1008D00005C08FEF0E943C04809300010E94340405
+:1008E00084B1807F84B985B1807F85B98AB1837FE7
+:1008F0008AB98BB1837F8BB93E98469808950E9440
+:10090000BD03809300010E94570480B38C7080BBAC
+:1009100081B3836F81BBE4E4F1E0A6E3B1E011921F
+:100920001D9281E0E235F807D1F70C94A7039F925E
+:10093000AF92BF92CF92DF92EF92FF920F931F93ED
+:10094000CF93DF9380910001882379F08091350166
+:100950008F5F80933501811108C00E94BD03809391
+:100960000001811102C00E944F0386E3E82E81E05E
+:10097000F82E8701C0E0D0E0BB24B39492E0A92E0A
+:10098000CC24C394D12CC730D10500F5809100014F
+:10099000811164C080E40E941204809300018111DF
+:1009A00012C082E10E943C048093000181110BC0BF
+:1009B000C6010C2E01C0880F0A94EAF780950E94A8
+:1009C0003C04809300010E94340448C0CA30A1F066
+:1009D00028F4C83059F0C93061F005C0CC3089F036
+:1009E00070F0CD3089F0209A289810C0219A29986B
+:1009F0000DC0229A2A980AC0239A2B9807C0529AAF
+:100A000001C0539A5B9802C03E9A4698E0EAEA9584
+:100A1000F1F78FB181708B25799902C032E001C066
+:100A200030E0832B7C9902C034E001C030E0832B9E
+:100A30007D9902C028E001C020E0822B7E9902C08F
+:100A400090E101C090E0892B9FB19095991F992763
+:100A5000991F9295990F907E892B0FC0809100016C
+:100A600081114AC080E40E9412048093000188230F
+:100A700081F1912C0E943404892DD8019C91981702
+:100A800019F08C93A09201010E94570421960F5FE8
+:100A90001F4FCE30D10509F076CF80910101882318
+:100AA00069F1815080930101882339F0EFE9FFE07B
+:100AB0003197F1F700C0000021C0E4E4F1E0D70174
+:100AC0008D917D018193B4E4EB16B1E0FB06B9F79B
+:100AD00015C083E10E943C04809300018111C9CFBD
+:100AE00081E40E941204809300018111C2CF0E9410
+:100AF0004D04982E9094BECF80E0BFCF0E944D034E
+:100B000081E0DF91CF911F910F91FF90EF90DF90E7
+:100B1000CF90BF90AF909F900895E82FF0E0EC5BEE
+:100B2000FE4F8081089508958B3B910580F4883AAB
+:100B3000910548F5853A9105D8F48430910508F07F
+:100B4000B2C0019709F06EC081E090E00895803E48
+:100B5000910508F467C0883E910508F4A4C09C0183
+:100B6000205F31092031310508F05CC0906508959F
+:100B7000853A910509F459C0863A910509F058C0A3
+:100B800082E890E40895883A910509F454C0893ABE
+:100B9000910509F453C08A3A910509F452C08B3A81
+:100BA000910509F451C08C3A910509F450C08D3A71
+:100BB000910509F44FC0803B910509F44EC08E3A6F
+:100BC000910509F44DC08F3A910509F44CC0813B61
+:100BD000910509F44BC0823B910509F44AC0833B5F
+:100BE000910509F449C0843B910509F448C0853B4F
+:100BF000910509F447C0863B910509F446C0873B3F
+:100C0000910509F445C0883B910509F444C0893B2E
+:100C1000910509F443C08A3B910509F442C080E084
+:100C200094E4089580E090E0089581E890E40895C8
+:100C300083E890E4089582EE94E4089589EE94E4C4
+:100C400008958AEE94E4089585EB94E4089586EB84
+:100C500094E4089587EB94E408958CEC94E408956B
+:100C60008DEC94E4089583E895E408958AE895E48A
+:100C7000089582E995E4089584E995E4089581E270
+:100C800096E4089583E296E4089584E296E4089554
+:100C900085E296E4089586E296E4089587E296E474
+:100CA00008958AE296E40895089524E5829FC0019C
+:100CB0001124FC0126E0729FE00DF11D1124E60FC6
+:100CC000F11DEE0FFF1FE550FF4F859194910895A0
+:100CD000880F991FFC01ED58F0408591949108957B
+:100CE000880F991FFC01ED50FF4F85919491089555
+:100CF00024E5829FC0011124FC0146E0749FE00DB1
+:100D0000F11D1124E60FF11DEE0FFF1FE550FF4FFF
+:100D1000859194919C013A9521154FE1340708F48F
+:100D200027C13F512115304120F49F700E94700669
+:100D300008959C0130532115304118F49927906C87
+:100D40000895811520E5920771F40E943A144FEF3F
+:100D500084E39CE0415080409040E1F700C00000F7
+:100D60000E945D1B05C1813020E5920731F480911E
+:100D7000CD0181608093CD01FBC09C0130552115D0
+:100D8000304108F05CC0292F33272F7033272130E2
+:100D90003105E9F4AC0164E0440F551F6A95E1F7B1
+:100DA00044275370BC016370772702C0220F331FA2
+:100DB0006A95E2F73C68242B352B73E0880F991F66
+:100DC0007A95E1F780769927822B932B089522302C
+:100DD000310529F4982F8827816F906A0895233070
+:100DE0003105A1F4AC0133E0440F551F3A95E1F70A
+:100DF000407E57708370992721E030E002C0220FB7
+:100E0000331F8A95E2F7C9019C6816C0243031056A
+:100E100031F5AC0123E0440F551F2A95E1F7407EE0
+:100E200057708370992721E030E002C0220F331FF2
+:100E30008A95E2F7C9019A68842B952B08959C0145
+:100E400030572115304118F49F70906208959C012D
+:100E500030582115304118F49F70906A0895803EF3
+:100E60009105E0F4803C910558F58133910509F432
+:100E70006FC048F48932910509F463C08A32910544
+:100E800009F46DC072C089339105E9F0823891058B
+:100E9000D1F08533910509F44DC067C0833E9105BB
+:100EA00081F138F4803E9105B9F0823E9105D9F088
+:100EB0005CC0863E910561F1873E9105A1F155C068
+:100EC0000E94680608952091DF0120FD02C021FFE5
+:100ED0004CC080EE90E049C08091DF0180FFF9CFE7
+:100EE00089E390E042C08091DF0182FF0EC08091D3
+:100EF000DF0184FF03C080E090E037C083EE90E024
+:100F000034C08091DF0182FFF2CF82EE90E02DC0ED
+:100F10008091DF0183FF0BC08091DF0184FDEBCF67
+:100F200087EE90E022C08091DF0183FFF5CF86EE4F
+:100F300090E01BC08091DF0185FF07C089E290E04F
+:100F400014C08091DF0185FFF9CF85E390E00DC0EB
+:100F50008091DF0186FF07C08AE290E006C08091A1
+:100F6000DF0186FFF9CF81E390E00E9494050895A8
+:100F7000089508950C94B907809162010895CF9364
+:100F8000DF9300D01F92CDB7DEB79C018091E501C1
+:100F9000843019F593E099833B832A839093E90089
+:100FA0008FEF9091E800815095FD06C095ED9A95E0
+:100FB000F1F700008111F5CF8091E80085FF0DC0A9
+:100FC00040E050E063E070E0CE0101960E942C0A00
+:100FD0008091E8008E778093E8000F900F900F903B
+:100FE000DF91CF910895CF93DF9300D01F92CDB7BB
+:100FF000DEB72091E501243021F522E029839B838F
+:101000008A8383E08093E9008FEF9091E80081501C
+:1010100095FD06C095ED9A95F1F700008111F5CF89
+:101020008091E80085FF0DC040E050E063E070E093
+:10103000CE0101960E942C0A8091E8008E77809361
+:10104000E8000F900F900F90DF91CF9108959C01D1
+:101050008091E5018430F9F482E08093E9009FEF0C
+:101060008091E800915085FD06C085ED8A95F1F7E5
+:1010700000009111F5CF8091E80085FF0CC040E0A1
+:1010800050E065E070E0C9010E942C0A8091E80000
+:101090008E778093E8000895CF93DF93EC018091E1
+:1010A000E501843009F046C090910C019923D9F0F4
+:1010B00090910D019923B9F08093E9008FEF909101
+:1010C000E800815095FD06C095E19A95F1F7000082
+:1010D0008111F5CF8091E80085FF2CC040E050E001
+:1010E00060E170E017C081E08093E9008FEF90919C
+:1010F000E800815095FD06C095ED9A95F1F7000046
+:101100008111F5CF8091E80085FF14C040E050E0E8
+:1011100068E070E0CE010E942C0A8091E8008E7792
+:101120008093E80080E1FE01A2E5B1E001900D921C
+:101130008A95E1F7DF91CF9108958091E4018111C3
+:1011400009C00E94BD0B0E941A0C8091E2008460CD
+:101150008093E20008951092E401089508950C949C
+:1011600099210E94F31A0E949F210E94C50E0C949F
+:10117000BA0742E061EC81E00E94360B42E061EC8C
+:1011800082E00E94360B42E061EC83E00E94360B65
+:1011900042E161EC84E00C94360B8091E7018330EE
+:1011A00009F455C030F4813071F0823009F48EC0FA
+:1011B00008958A3009F47AC08B3009F460C0893010
+:1011C00009F09CC020C08091E601813A09F096C0E8
+:1011D0008091E800877F8093E8008091EA019091F8
+:1011E000EB01892B21F460E182E591E003C060E02E
+:1011F00080E090E070E00E94770A8091E8008B77B1
+:101200008093E80008958091E601813209F076C06C
+:101210008091EA019091EB01009719F0039709F092
+:101220006DC08091E800877F8093E8008091E8009E
+:1012300082FD05C08091E5018111F8CF5FC08091EA
+:10124000F100809362018091E8008B7753C0809118
+:10125000E601813A09F052C08091EA019091EB01D8
+:10126000892B09F04BC08091E800877F8093E800CC
+:101270008091E80080FFFCCF80910C0136C0809106
+:10128000E6018132D9F58091EA019091EB01892B39
+:10129000A9F58091E800877F8093E8000E946B0B9E
+:1012A0008091E80180930C010C943A148091E6013E
+:1012B000813221F58091E800877F8093E8000E94C9
+:1012C0006B0B8091E9018093630108958091E601A1
+:1012D000813AA1F48091E800877F8093E8008091B3
+:1012E000E80080FFFCCF809163018093F100809142
+:1012F000E8008E778093E8000C946B0B089584B718
+:10130000877F84BF0FB6F894A895809160008861AC
+:1013100080936000109260000FBE90E080E80FB6EE
+:10132000F89480936100909361000FBE0E94140FA7
+:101330000E94BD0B0E941A0C8091E2008460809391
+:10134000E20078940E94A50E0E94160F82E091E0C0
+:101350000E94C00E0E9487218091E501853069F4CA
+:101360000E94B21A8091E3018823B1F30E94DF1A30
+:10137000882391F30E94160AEFCF0E941C0FECCF36
+:10138000292F332723303105C9F060F4213031058E
+:1013900081F02230310509F041C08DE690E02FEC5C
+:1013A00033E040C021323105E1F02232310531F124
+:1013B00035C082E190E02CE334E034C099278130DD
+:1013C000910549F028F0029749F5EBE9F3E005C0F3
+:1013D000EBECF3E002C0E3EBF3E0849190E09F01DB
+:1013E00021C06430D8F4E62FF0E0EE0FFF1FEE5D71
+:1013F000FE4F2081318189E090E014C0643070F4A8
+:1014000070E0FB01EE0FFF1FE65EFE4F2081318191
+:10141000FB01EA5EFE4F808190E004C080E090E036
+:1014200020E030E0FA0131832083089580E189BD16
+:1014300082E189BD09B400FEFDCF8091D8008F7D87
+:101440008093D8008091E00082608093E0008091DA
+:10145000E00081FDFCCF0895CF92DF92EF92FF92E2
+:101460000F931F93CF93DF93EC018B016A010E94CE
+:101470008A0B811133C0C114D10439F0F601808187
+:101480009181081B190BC80FD91FE12CF12C0115F4
+:10149000110519F18091E80085FD16C08091E800E2
+:1014A0008E778093E800C114D10449F0F601808161
+:1014B0009181E80EF91EF182E08285E00FC00E9462
+:1014C0008A0B882321F30AC089918093F10001508F
+:1014D0001109FFEFEF1AFF0ADACF80E0DF91CF9119
+:1014E0001F910F91FF90EF90DF90CF900895209182
+:1014F000EC013091ED012617370748F061157105B1
+:1015000039F42091E8002E772093E80001C0B9015A
+:10151000FC0120E06115710579F18091E5018823D6
+:10152000F1F18530F1F18091E80083FD3CC08091BC
+:10153000E80082FD2EC08091E80080FFEBCF209173
+:10154000F3008091F20090E0922B6115710551F04B
+:101550008830910538F421912093F1006150710990
+:101560000196F3CF21E0089709F020E08091E80090
+:101570008E778093E800CECF2111CFCF0AC0809123
+:10158000E501882361F0853061F08091E80083FDFA
+:101590000AC08091E80082FFF2CF80E0089582E0E7
+:1015A000089583E0089581E008952091EC01309141
+:1015B000ED012617370748F06115710539F42091C0
+:1015C000E8002E772093E80001C0B901FC0120E07B
+:1015D0006115710591F18091E501882309F440C0FE
+:1015E000853009F43FC08091E80083FD3DC08091C3
+:1015F000E80082FD2FC08091E80080FFE9CF2091B4
+:10160000F3008091F20090E0922B6115710559F082
+:101610008830910540F424912093F1003196615077
+:1016200071090196F2CF21E0089709F020E080913E
+:10163000E8008E778093E800CBCF2111CCCF0AC091
+:101640008091E501882361F0853061F08091E800A8
+:1016500083FD0AC08091E80082FFF2CF80E0089508
+:1016600082E0089583E0089581E00895982F9730EF
+:1016700068F59093E900981739F07091EC0020918B
+:10168000ED005091F00003C0242F762F50E021FD93
+:1016900002C09F5FECCF3091EB003E7F3093EB00B8
+:1016A0003091ED003D7F3093ED003091EB003160E3
+:1016B0003093EB007093EC002093ED005093F0001A
+:1016C0002091EE0027FDE5CF80E008958F70809394
+:1016D000E90081E008958091E60187FF11C08091C3
+:1016E000E80082FD05C08091E5018111F8CF11C0AD
+:1016F0008091E8008B770BC08091E501882349F049
+:101700008091E80080FFF8CF8091E8008E77809389
+:10171000E80008952091E4003091E50095E64091BD
+:10172000EC00842F817040FF23C08091E80080FD91
+:101730001DC08091E501882399F0853099F0809152
+:10174000EB0085FD11C04091E4005091E5002417A5
+:10175000350729F3915011F09A01E1CF84E0089503
+:1017600082E0089583E0089581E0089580E008957F
+:101770004091E80042FFDDCF08950E942B0C0E94AB
+:10178000330CE0EEF0E0808181608083E8EDF0E0F2
+:1017900080818F77808319BCA7EDB0E08C918E7F1C
+:1017A0008C9380818F7E80831092E40108950F9343
+:1017B0001F93CF93DF930E942B0C0E94330CC8ED34
+:1017C000D0E088818F77888388818068888388814A
+:1017D0008F7D888319BC1092E5011092E10110926F
+:1017E000E3011092E20100EE10E0F80180818B7FAE
+:1017F000808388818160888342E060E080E00E948D
+:10180000360BE1EEF0E080818E7F8083E2EEF0E047
+:10181000808181608083808188608083F8018081FD
+:101820008E7F8083888180618883DF91CF911F9133
+:101830000F910895E8EDF0E080818F7E8083E7EDE1
+:10184000F0E080818160808384E082BF81E08093CA
+:10185000E4010C94D70BE8EDF0E080818E7F80836B
+:101860001092E20008951092DA001092E1000895BB
+:101870001F920F920FB60F9211242F933F934F9305
+:101880005F936F937F938F939F93AF93BF93EF93E8
+:10189000FF938091E10082FF0BC08091E20082FF04
+:1018A00007C08091E1008B7F8093E1000E94A40E2D
+:1018B0008091DA0080FF1FC08091D80080FF1BC09C
+:1018C0008091DA008E7F8093DA008091D90080FFCA
+:1018D0000DC080E189BD82E189BD09B400FEFDCF64
+:1018E00081E08093E5010E949D0805C019BC10921B
+:1018F000E5010E94AB088091E10080FF19C0809152
+:10190000E20080FF15C08091E2008E7F8093E200AC
+:101910008091E20080618093E2008091D800806233
+:101920008093D80019BC85E08093E5010E94AF0840
+:101930008091E10084FF30C08091E20084FF2CC0E0
+:1019400080E189BD82E189BD09B400FEFDCF8091AF
+:10195000D8008F7D8093D8008091E1008F7E8093A6
+:10196000E1008091E2008F7E8093E2008091E200AE
+:1019700081608093E2008091E101882311F084E08E
+:1019800007C08091E30087FD02C081E001C083E0D1
+:101990008093E5010E94B1088091E10083FF29C096
+:1019A0008091E20083FF25C08091E100877F8093D2
+:1019B000E10082E08093E5011092E1018091E10075
+:1019C0008E7F8093E1008091E2008E7F8093E20021
+:1019D0008091E20080618093E20042E060E080E07C
+:1019E0000E94360B8091F00088608093F0000E9486
+:1019F000AE08FF91EF91BF91AF919F918F917F9131
+:101A00006F915F914F913F912F910F900FBE0F906B
+:101A10001F9018951F920F920FB60F9211242F93BB
+:101A20003F934F935F936F937F938F939F93AF9366
+:101A3000BF93CF93DF93EF93FF93C091E900CF70F3
+:101A40008091EC00D82FD17080FDD0E81092E90091
+:101A50008091F000877F8093F00078940E944E0D73
+:101A60001092E9008091F00088608093F000CD2B07
+:101A7000CF70C093E900FF91EF91DF91CF91BF91BB
+:101A8000AF919F918F917F916F915F914F913F9116
+:101A90002F910F900FBE0F901F9018951F93CF930B
+:101AA000DF93CDB7DEB7AA970FB6F894DEBF0FBEAF
+:101AB000CDBFE6EEF1E08091F100819321E0EE3EB2
+:101AC000F207C9F70E94CD088091E80083FF24C186
+:101AD0008091E6019091E701492F50E04A3051058D
+:101AE00008F01AC1FA01EA5AFF4F0C9430238038EB
+:101AF00081F0823809F010C18091EA018F708093E3
+:101B0000E9008091EB0085FB882780F91092E900BD
+:101B100006C08091E2019091E30191118260909161
+:101B2000E800977F9093E8008093F1001092F10015
+:101B3000C8C0282F2D7F09F0EFC0882319F082300C
+:101B400061F0EAC08091E801813009F0E5C093308E
+:101B500009F080E08093E3012BC08091E8018111BE
+:101B600027C08091EA018F7009F4D6C08093E90004
+:101B70002091EB0020FF1CC0933021F48091EB00FA
+:101B8000806214C09091EB0090619093EB0021E093
+:101B900030E0A90102C0440F551F8A95E2F7409337
+:101BA000EA001092EA008091EB0088608093EB00DD
+:101BB0001092E9008091E800877F86C08111ACC057
+:101BC0001091E8011F778091E3008078812B80934A
+:101BD000E3008091E800877F8093E8000E946B0B10
+:101BE0008091E80080FFFCCF8091E30080688093C3
+:101BF000E300111102C082E001C083E08093E5019F
+:101C00008BC08058823008F087C08091E8019091A5
+:101C1000E9018C3D53E0950779F583E08A838AE2F8
+:101C200089834FB7F894DE01139620E03EE051E23D
+:101C3000E32FF0E050935700E49120FF03C0E295BA
+:101C4000EF703F5FEF708E2F90E0EA3010F0C79694
+:101C500001C0C0968D939D932F5F243149F74FBFEC
+:101C60008091E800877F8093E8006AE270E0CE010F
+:101C700001960E94770A14C0AE014F5F5F4F6091DA
+:101C8000EA010E94C009BC01892B09F445C090916A
+:101C9000E800977F9093E80089819A810E94D50A95
+:101CA0008091E8008B778093E80036C08038A1F5FA
+:101CB0008091E800877F8093E8008091E101809324
+:101CC000F1008091E8008E778093E8000E946B0B12
+:101CD00023C0811121C08091E8019091E9019927E9
+:101CE0000297D4F48091E800877F8093E800809188
+:101CF000E8018093E1010E946B0B8091E101811169
+:101D000006C08091E30087FD02C081E001C084E04D
+:101D10008093E5010E94B9088091E80083FF0AC022
+:101D20008091E800877F8093E8008091EB008062DB
+:101D30008093EB00AA960FB6F894DEBF0FBECDBF1E
+:101D4000DF91CF911F9108950895CF938091E50180
+:101D50008823A1F0C091E900CF709091EC00892F09
+:101D6000817090FD80E8C82B1092E9008091E80016
+:101D700083FD0E944E0DCF70C093E900CF9108956E
+:101D800090936901809368010895E0916801F09152
+:101D90006901309721F00190F081E02D099480E0F5
+:101DA0000895E0916801F0916901309721F0028077
+:101DB000F381E02D09940895E0916801F0916901A3
+:101DC000309721F00480F581E02D09940895209149
+:101DD0006601309167012817390771F09093670108
+:101DE00080936601E0916801F0916901309721F0DC
+:101DF0000680F781E02D09940895209164013091C7
+:101E000065012817390771F090936501809364018B
+:101E1000E0916801F0916901309721F00084F1852B
+:101E2000E02D0994089508950C94130F0E94F91A57
+:101E30000E947F040C94BF1BCF92DF92EF92FF921F
+:101E40000F931F93CF93DF93CDB7DEB72B970FB6CA
+:101E5000F894DEBF0FBECDBF0E9497048BE6C82E5C
+:101E600081E0D82E00E010E0E02E802F0E948D054A
+:101E7000F60141916F01F82EF426B1F40F5F1F4F68
+:101E80000E30110589F78FEF89838A831B820E94A8
+:101E9000021B8160782F9D838C8349815A816B81DD
+:101EA0008D810E94BF0F40C09091CD0191FF04C071
+:101EB0008B870E9493058B8520E030E04F2D50E00A
+:101EC000922FBA01022E02C0759567950A94E2F727
+:101ED00060FF24C02E83EF8221E030E0690102C060
+:101EE000CC0CDD1C9A95E2F790E08C219D21892B8A
+:101EF00009F420E028870E94021B8160782F9A87CE
+:101F000089874E815F8168858A850E94BF0FF801AD
+:101F1000E559FE4F8081C826C08206C02F5F3F4F23
+:101F20002630310569F6AACF0E94A61E0E94C50E72
+:101F300090916A018917A1F00E94C50E80936A01F1
+:101F40002B960FB6F894DEBF0FBECDBFDF91CF91B9
+:101F50001F910F91FF90EF90DF90CF900C94BA07F4
+:101F60002B960FB6F894DEBF0FBECDBFDF91CF9199
+:101F70001F910F91FF90EF90DF90CF900895CF9336
+:101F8000DF93CDB7DEB72B970FB6F894DEBF0FBE49
+:101F9000CDBF4F83588769877A878B87DE0111967B
+:101FA00086E0FD0111928A95E9F785E0FE013796FA
+:101FB00001900D928A95E1F749815A816B817C816C
+:101FC0008D819E810E94CE162B960FB6F894DEBFAF
+:101FD0000FBECDBFDF91CF9108950895CF93C82F45
+:101FE000882309F4C1C0823859F40E94C50E81FDCE
+:101FF000BBC089E30E946B190E94331A89E30CC0AD
+:10200000833879F40E94C50E80FDAEC083E50E943E
+:102010006B190E94331A83E50E94AA19CF910C9480
+:10202000331A843859F40E94C50E82FD9DC087E49E
+:102030000E946B190E94331A87E4EECF8CEF8C0F4D
+:10204000813A48F48C2F0E94EC2081118DC08C2F96
+:102050000E946B19E3CF80E28C0F883048F4C77080
+:1020600081E001C0880FCA95EAF70E94EC19D6CF2B
+:102070008BE58C0F833078F4C53A29F0C63A31F0FD
+:1020800083E890E005C081E890E002C082E890E03B
+:10209000CF910C94E70E88E58C0F833108F064C073
+:1020A000C83A39F1C93A41F1CA3A49F1CB3A51F14A
+:1020B000CC3A59F1CD3A61F1C03B69F1CE3A71F1B8
+:1020C000CF3A79F1C13B81F1C23B89F1C33B91F138
+:1020D000C43B99F1C53BA1F1C63BA9F1C73BB1F1A6
+:1020E000C83BB9F1C93BC1F1CA3BC9F180E090E0FE
+:1020F00038C082EE90E035C089EE90E032C08AEEC2
+:1021000090E02FC085EB90E02CC086EB90E029C0DA
+:1021100087EB90E026C08CEC90E023C08DEC90E043
+:1021200020C083E891E01DC08AE891E01AC082E9EE
+:1021300091E017C084E991E014C081E292E011C0FF
+:1021400083E292E00EC084E292E00BC085E292E06E
+:1021500008C086E292E005C087E292E002C08AE20F
+:1021600092E0CF910C94FD0ECF910895882309F44D
+:102170004BC0823859F40E94C50E81FF45C089E3E7
+:102180000E946B190E94331A89E30CC0833871F4E2
+:102190000E94C50E80FF38C083E50E946B190E9423
+:1021A000331A83E50E94AA190C94331A843859F41F
+:1021B0000E94C50E82FF28C087E40E946B190E940E
+:1021C000331A87E4EFCF9CEF980F913A58F390E2DF
+:1021D000980F983050F4877091E001C0990F8A955C
+:1021E000EAF7892F0E94F219DFCF9BE5980F933011
+:1021F00020F480E090E00C94E70E885A833120F4BC
+:1022000080E090E00C94FD0E0895882321F00E9458
+:10221000EC190C94331A0895882321F00E94F219C6
+:102220000C94331A0895BF92CF92DF92EF92FF92EF
+:102230000F931F93CF93DF9300D000D000D0CDB782
+:10224000DEB77C0185E0F701DE01119601900D9269
+:102250008A95E1F7F70183819481892B09F4E6C21D
+:10226000D08011811F3F21F4FFEFDF1609F4DEC299
+:10227000F7010281258122952F70C7012E830E94CC
+:10228000ED0FD9821A8389819A810E942A19182F09
+:10229000B92E0E9429190E94F0172E81002319F0EF
+:1022A0000E94091A2E81EB2DE295EF704E2F50E01F
+:1022B000FA01E05AFF4F0C9430238B2D807F9B2D29
+:1022C0009F70F92E882319F0F29480EFF8220023F2
+:1022D00049F0FF2009F457C28F2D0E94FC190E947B
+:1022E000331A51C2812F0E94B610FF2009F49EC2FA
+:1022F0008F2D0E94021A26960FB6F894DEBF0FBEED
+:10230000CDBFDF91CF911F910F91FF90EF90DF90A4
+:10231000CF90BF900C94331A3B2D307F8B2D8F7054
+:10232000303211F08295807F112319F0113021F1A4
+:102330002CC00023B9F0222309F490C1213009F008
+:102340008DC126960FB6F894DEBF0FBECDBFDF91CC
+:10235000CF911F910F91FF90EF90DF90CF90BF90A2
+:102360000C941C1A222319F0213009F45FC28E83C9
+:102370000E941F1A8E8186C1002321F0223008F0AE
+:1023800055C26CC1211152C27DC1002321F022230C
+:1023900009F464C1F8C1222309F474C109C28B2D68
+:1023A00086958695837019F08130D1F03FC2002365
+:1023B00021F0812F9B2D937002C080E090E0269643
+:1023C0000FB6F894DEBF0FBECDBFDF91CF911F9146
+:1023D0000F91FF90EF90DF90CF90BF900C94E70E9D
+:1023E000002321F0812F9B2D937002C080E090E0AC
+:1023F00026960FB6F894DEBF0FBECDBFDF91CF910A
+:102400001F910F91FF90EF90DF90CF90BF900C94B1
+:10241000FD0E812F002319F00E94AE1D02C00E9404
+:10242000161E26960FB6F894DEBF0FBECDBFDF9105
+:10243000CF911F910F91FF90EF90DF90CF90BF90C1
+:102440000C949B1E8B2D837009F075C00111EEC199
+:10245000812F829586958770880F880F912F9F70A6
+:10246000C92ED12CE12CF12C082E04C0CC0CDD1C83
+:10247000EE1CFF1C0A94D2F714FF12C00FE010E00C
+:1024800020E030E004C0000F111F221F331F8A9587
+:10249000D2F7C901B801609570958095909503C0F9
+:1024A00060E070E0CB014B2D46954695437042307D
+:1024B000C1F060F56C297D298E299F29413051F1A9
+:1024C00026960FB6F894DEBF0FBECDBFDF91CF9139
+:1024D0001F910F91FF90EF90DF90CF90BF900C94E1
+:1024E00017186C297D298E299F2926960FB6F894F6
+:1024F000DEBF0FBECDBFDF91CF911F910F91FF9037
+:10250000EF90DF90CF90BF900C9433180E94171873
+:10251000C701B60126960FB6F894DEBF0FBECDBF39
+:10252000DF91CF911F910F91FF90EF90DF90CF90AF
+:10253000BF900C94FB17002319F08B2D817001C004
+:102540008695882309F472C1812F829586958770BC
+:10255000880F880F912F9F70C92ED12CE12CF12C60
+:10256000082E04C0CC0CDD1CEE1CFF1C0A94D2F714
+:1025700014FF12C00FE010E020E030E004C0000FB4
+:10258000111F221F331F8A95D2F7C901B801609528
+:1025900070958095909503C060E070E0CB014B2D65
+:1025A0004695469543704230C1F060F56C297D290F
+:1025B0008E299F29413051F126960FB6F894DEBF3F
+:1025C0000FBECDBFDF91CF911F910F91FF90EF9084
+:1025D000DF90CF90BF900C94F1186C297D298E2943
+:1025E0009F2926960FB6F894DEBF0FBECDBFDF91B0
+:1025F000CF911F910F91FF90EF90DF90CF90BF9000
+:102600000C940D190E94F118C701B60126960FB659
+:10261000F894DEBF0FBECDBFDF91CF911F910F9118
+:10262000FF90EF90DF90CF90BF900C94D518103FA3
+:10263000D1F118F4103E50F4A1C0123F09F463C068
+:1026400008F44CC0133F09F473C098C01F708B2D61
+:102650008F710023A1F00E946E18812F26960FB66D
+:10266000F894DEBF0FBECDBFDF91CF911F910F91C8
+:10267000FF90EF90DF90CF90BF900C9405110E94D7
+:102680008F18812F26960FB6F894DEBF0FBECDBFF0
+:10269000DF91CF911F910F91FF90EF90DF90CF903E
+:1026A000BF900C940C110023A9F02111BFC08B2DF9
+:1026B0008F7126960FB6F894DEBF0FBECDBFDF91A7
+:1026C000CF911F910F91FF90EF90DF90CF90BF902F
+:1026D0000C94B418223008F0A9C0E9CF0023A9F067
+:1026E0008B2D8F7126960FB6F894DEBF0FBECDBF2F
+:1026F000DF91CF911F910F91FF90EF90DF90CF90DE
+:10270000BF900C946E18002359F38B2D8F71269671
+:102710000FB6F894DEBF0FBECDBFDF91CF911F91F2
+:102720000F91FF90EF90DF90CF90BF900C948F1897
+:10273000002399F08B2D8F7126960FB6F894DEBF8B
+:102740000FBECDBFDF91CF911F910F91FF90EF9002
+:10275000DF90CF90BF900C94591826960FB6F8943E
+:10276000DEBF0FBECDBFDF91CF911F910F91FF90C4
+:10277000EF90DF90CF90BF900C944F180023A9F0FA
+:10278000222309F4ADCF812F26960FB6F894DEBF31
+:102790000FBECDBFDF91CF911F910F91FF90EF90B2
+:1027A000DF90CF90BF900C94EE0F222309F4ADCFB1
+:1027B000812F26960FB6F894DEBF0FBECDBFDF91F6
+:1027C000CF911F910F91FF90EF90DF90CF90BF902E
+:1027D0000C94B6104B2D4F70612FC7010E940E0351
+:1027E00026960FB6F894DEBF0FBECDBFDF91CF9116
+:1027F0001F910F91FF90EF90DF90CF90BF900C94BE
+:1028000073174B2D4F70612FC70126960FB6F894A2
+:10281000DEBF0FBECDBFDF91CF911F910F91FF9013
+:10282000EF90DF90CF90BF900C94540626960FB691
+:10283000F894DEBF0FBECDBFDF91CF911F910F91F6
+:10284000FF90EF90DF90CF90BF9008950E94091AFB
+:102850000E94191A0E94DE190E94331A0E944B1F0F
+:102860000E949B1E80E090E00E94E70E80E090E0D6
+:102870000C94FD0E0E94F9190C9426140E942A193A
+:10288000292F22952F702C3030F42A3048F4225012
+:10289000223078F405C02C3041F02F3031F009C0DF
+:1028A000803E48F0803F29F406C093FB882780F9DA
+:1028B000089580E0089581E00895CF93DF9300D0DC
+:1028C00000D01F92CDB7DEB70F900F900F900F90F2
+:1028D0000F90DF91CF910895CF93DF9300D000D078
+:1028E00000D0CDB7DEB726960FB6F894DEBF0FBE88
+:1028F000CDBFDF91CF9108951F93CF93DF93C09108
+:10290000790116E080917A01C81799F0D0E01C9FF8
+:10291000F0011D9FF00D1124E558FE4F40815181BB
+:1029200062817381848195810E946C142196C770A5
+:10293000E9CFDF91CF911F9108954091AB01509164
+:10294000AC016091AD017091AE018091AF019091A9
+:10295000B0010C946C148091B00182958F7009F0D5
+:1029600054C08091AD01882309F44FC08091790152
+:10297000A0917A014091AE015091AF016091AB01FD
+:102980007091AC01B6E08A1709F43FC090E04115A0
+:102990005105C1F17F3F11F46F3FA1F1B89FF001E4
+:1029A000B99FF00D1124E558FE4F218127132AC04D
+:1029B0002081261327C02281211124C02381348144
+:1029C0002417350710F421503109241B350B283CFE
+:1029D0003105C0F42091B0012F7020612093B00127
+:1029E00026E0289FF001299FF00D1124E058FE4FAA
+:1029F00080818F70806180838BEA91E00E94131147
+:102A00000C947C1401968770BECF0895CF92DF920C
+:102A1000EF92FF920F931F93CF93DF93CDB7DEB763
+:102A200062970FB6F894DEBF0FBECDBF8C0185E074
+:102A3000F801DE011D9601900D928A95E1F7D8010B
+:102A40004C9111965C91119712966C918091AE0108
+:102A50009091AF01009709F475C13091AB0170916D
+:102A6000AC017F3F19F43F3F09F46CC1F801C3800A
+:102A7000D480E090AD01EE2009F4BEC02091B001F9
+:102A8000C816D90628F0D601A81BB90BCD0104C081
+:102A9000809590958C0D9D1DFF24F394883C9105A5
+:102AA00078F0F12C207F09F0C4C07C2DD98AC88A27
+:102AB00089890E945D148BEA91E00E941311AFC0D6
+:102AC000822F807F09F045C0571313C0431311C0F4
+:102AD00061110FC02F7020612093B0010E949D14DE
+:102AE0008BEA91E00E9413118091B001F801858377
+:102AF0002EC0CD2819F15F3F11F44F3FF9F0F62EAB
+:102B000061111CC08091790120917A0136E0821711
+:102B100009F45BC090E0389FF001399FF00D11245B
+:102B2000E558FE4F7181571306C07081471303C0EB
+:102B30007281711103C001968770E9CFF62E66236A
+:102B400009F41CC18091B00181608093B001F12C27
+:102B500015C1571309C0431307C0611105C0809107
+:102B6000B001F8018583C8C04D875E878D859E853D
+:102B70006A8B0E943E146A898823D1F16623C1F1D1
+:102B80002091B001822F82958F7090E0029774F0AF
+:102B90008091AB019091AC0198878F831986DB8679
+:102BA000CA862C87CE0107960E94131186E0F80191
+:102BB000ABEAB1E001900D928A95E1F70E94AB1467
+:102BC0000E949D14FF24F394D9C04D875E878D85A4
+:102BD0009E850E942A19292F22952F70223008F0F5
+:102BE000C1C09F7009F0BBC0805E883008F4C6C0C9
+:102BF000C8010E941311E6CFC816D90608F453C0C5
+:102C0000F601E81BF90BCF01883C910508F450C090
+:102C1000F12C7C2DD98AC88A89890E945D14EBEA3F
+:102C2000F1E086E0DF011D928A95E9F70E949D148C
+:102C3000A5C0571314C0431312C0611110C0809176
+:102C4000B001F8018583C8010E94131186E0EBEA08
+:102C5000F1E0DF011D928A95E9F7FE2C8FC04D87C8
+:102C60005E878D859E856A8B0E943E146A898823C3
+:102C700009F4BECF662309F4BBCF2091B001822FA7
+:102C800082958F7090E002970CF490CF8091AB0109
+:102C90009091AC019A8389831B82DD82CC822E8342
+:102CA000CE01019681CF809590958C0D9D1DACCF66
+:102CB000F62E662309F49CCF571333C0431331C05B
+:102CC0002091B00120FD24C0822F82958F70482F63
+:102CD00050E041155105E1F0D80115962C93159758
+:102CE0004F30510549F08F5F982F9295907F822F3A
+:102CF0008F70892B15968C93C8010E94131186E062
+:102D0000F801ABEAB1E001900D928A95E1F78ECF20
+:102D100086E0F801ABEAB1E001900D928A95E1F707
+:102D20002DC04D875E878D859E850E943E14811142
+:102D30003DCF8091B00181608093B001C8010E94B5
+:102D400013111CC0662309F453CF4D875E878D8510
+:102D50009E850E943E14882309F44ACF27CF811113
+:102D600043CF0CC0243008F043CF9F7009F43CCF10
+:102D7000D80115969C91907F09F036CF8F2D6296E1
+:102D80000FB6F894DEBF0FBECDBFDF91CF911F917C
+:102D90000F91FF90EF90DF90CF9008951F93CF9306
+:102DA000DF93CDB7DEB72C970FB6F894DEBF0FBE1A
+:102DB000CDBF4F83588769877A878B879C87CE01E1
+:102DC00007960E940615882371F08A859B85892BBA
+:102DD00009F441C088858F3F09F065C08F818F3F1E
+:102DE00009F061C038C086E0FE013796DE01119619
+:102DF00001900D928A95E1F76A857B8561157105D1
+:102E000051F1FF81E885EF3F11F4FF3F21F120915F
+:102E10007A0130E0C90101968770992740917901C4
+:102E200050E08417950709F447C0F983EA837D834E
+:102E30006C8396E0929FD001939FB00D1124A5580A
+:102E4000BE4FFE01319601900D929A95E1F7809365
+:102E50007A010E947C1416E08091790190917A01A8
+:102E60008917B9F1189FC001112485589E4F0E94FF
+:102E70000615882371F1E09179011E9FF00111245C
+:102E8000E558FE4F40815181628173818481958133
+:102E90000E946C148091790190E0019687709927C7
+:102EA00080937901D9CF4F81588569857A858B8543
+:102EB0009C850E946C14CFCF0E943A1410927A0124
+:102EC00010927901EBEAF1E086E0DF011D928A952C
+:102ED000E9F72C960FB6F894DEBF0FBECDBFDF9199
+:102EE000CF911F910895EF92FF920F931F93CF936D
+:102EF000DF938C01892B09F46CC0F12CEE24E39450
+:102F0000E8012196F8018491843740F4843008F078
+:102F100051C0813081F0823019F15BC0853709F4EE
+:102F200044C0A8F19CE7980F903708F052C08F7703
+:102F30000E94B61041C00E5F1F4FFE01849190E2C7
+:102F4000980F983050F48770FE2D01C0FF0F8A95BE
+:102F5000EAF78F2F0E940C1A14C00E94EE0F2DC0AA
+:102F60000E5F1F4FFE01849190E2980F983060F43D
+:102F70008770FE2D01C0FF0F8A95EAF78F2F0E9400
+:102F8000121A0E94331A19C00E94B61016C00E5FA2
+:102F90001F4FFE01C491CC2381F08FE99FE0019780
+:102FA000F1F700C00000C150F6CF0E5F1F4FFE01C9
+:102FB000F49003C00E94EE0F8E018F2D882309F438
+:102FC0009FCFEFE9FFE03197F1F700C0000081509B
+:102FD000F5CFDF91CF911F910F91FF90EF90089562
+:102FE00008956093B5017093B6018093B7019093F3
+:102FF000B8010C9426140F931F930091B501109102
+:10300000B6012091B7013091B801DC01CB01802BD2
+:10301000912BA22BB32B8093B5019093B601A09373
+:10302000B701B093B8011F910F910C9426140F9320
+:103030001F930091B5011091B6012091B701309115
+:10304000B801DC01CB0180239123A223B323809319
+:10305000B5019093B601A093B701B093B8011F9149
+:103060000F910C9426140F931F930091B5011091AA
+:10307000B6012091B7013091B801DC01CB01802766
+:103080009127A227B3278093B5019093B601A0930F
+:10309000B701B093B8011F910F910C9426141092B0
+:1030A000B1011092B2011092B3011092B4010C94CC
+:1030B000261441E050E060E070E004C0440F551F6A
+:1030C000661F771F8A95D2F74093B1015093B201E2
+:1030D0006093B3017093B4010C94261441E050E066
+:1030E00060E070E004C0440F551F661F771F8A958B
+:1030F000D2F78091B1019091B201A091B301B0914A
+:10310000B401482B592B6A2B7B2B4093B101509370
+:10311000B2016093B3017093B4010C94261441E0A2
+:1031200050E060E070E004C0440F551F661F771F39
+:103130008A95D2F740955095609570958091B10130
+:103140009091B201A091B301B091B40148235923E9
+:103150006A237B234093B1015093B2016093B30182
+:103160007093B4010C94261441E050E060E070E0EC
+:1031700004C0440F551F661F771F8A95D2F78091B0
+:10318000B1019091B201A091B301B091B40148276F
+:1031900059276A277B274093B1015093B20160936E
+:1031A000B3017093B4010C9426140F931F930091F4
+:1031B000B1011091B2012091B3013091B401DC0151
+:1031C000CB01802B912BA22BB32B8093B101909339
+:1031D000B201A093B301B093B4011F910F910C946D
+:1031E00026140F931F930091B1011091B201209109
+:1031F000B3013091B401DC01CB0180239123A223E0
+:10320000B3238093B1019093B201A093B301B09323
+:10321000B4011F910F910C9426140F931F930091EA
+:10322000B1011091B2012091B3013091B401DC01E0
+:10323000CB0180279127A227B3278093B1019093D8
+:10324000B201A093B301B093B4011F910F910C94FC
+:1032500026140895CF92DF92EF92FF920F931F935F
+:10326000CF93DF938C01C090B101D090B201E09078
+:10327000B301F090B4018091B5019091B601A09195
+:10328000B701B091B801C82AD92AEA2AFB2ACFE1AE
+:10329000D0E0D701C6010C2E04C0B695A79597952E
+:1032A00087950A94D2F780FF07C0B8018C2F0E943F
+:1032B00078068130910531F4219758F7B80180E004
+:1032C0000E947806DF91CF911F910F91FF90EF90B0
+:1032D000DF90CF90089590910C019923F1F0909197
+:1032E0000D019923D1F0982F9695969596959F303C
+:1032F00080F5E0910E01F0910F01E90FF11D87704B
+:1033000021E030E0A90102C0440F551F8A95E2F781
+:10331000CA019181892B8183089520910E013091FA
+:103320000F01F90132969FEF40E05191851789F026
+:103330009F3F19F4511101C0942F4F5F4E30A9F7F0
+:103340009F3F39F0F901E90FF11D97FDFA9582834E
+:103350000895089590910C019923F9F090910D0131
+:103360009923D9F0982F9695969596959F3028F5A4
+:10337000E0910E01F0910F01E90FF11D877021E03E
+:1033800030E0A90102C0440F551F8A95E2F7CA0137
+:103390008095918189238183089520910E01309138
+:1033A0000F01F9013296205F3F4F9081891301C0D0
+:1033B00010823196E217F307C1F7089581E090E09B
+:1033C000E0910E01F0910F01E80FF91F10820196B4
+:1033D00080319105A9F708959091CC01892B8093B4
+:1033E000CC01089580959091CC0189238093CC01E4
+:1033F00008951092CC0108959091CB01892B809370
+:10340000CB01089580959091CB0189238093CB01C6
+:1034100008951092CB0108959091CA01892B809351
+:10342000CA01089580959091CA0189238093CA01A9
+:1034300008951092CA0108958093B90108951092D9
+:10344000B901089580910E0190910F01FC01319610
+:103450009C01205F3F4F80E0919191118F5FE217B7
+:10346000F307D1F70895E0910E01F0910F018091DB
+:10347000CC018083E0910E01F0910F019081809149
+:10348000CB01892B8083E0910E01F0910F01908197
+:103490008091CA01892B80838091B901882361F0D2
+:1034A000E0910E01F0910F019081892B80830E94A1
+:1034B000221A81111092B90180910E0190910F0191
+:1034C0000C94D10ECF92DF92EF92FF926C01EE241A
+:1034D000FF24C114D104E104F10421F0C701B601B5
+:1034E00020E101C020E0C72ED82EE92EFF24C11410
+:1034F000D104E104F10419F0285FC701B6016B01A2
+:103500007C0154E0F694E794D794C7945A95D1F788
+:10351000C114D104E104F10419F02C5FC701B60114
+:103520006B017C0142E0F694E794D794C7944A95E6
+:10353000D1F7C114D104E104F10419F02E5FC701E1
+:10354000B601DC01CB01B695A79597958795892B98
+:103550008A2B8B2B09F02F5F822FFF90EF90DF904B
+:10356000CF9008958091E501843029F120E488E12D
+:1035700090E00FB6F894A895809360000FBE20935A
+:10358000600080E00E94BA0783B7817F846083BFB8
+:1035900083B7816083BF7894889583B78E7F83BF1C
+:1035A0000FB6F894A89580916000886180936000C0
+:1035B000109260000FBE089508950C94DC1ACF930A
+:1035C0000E94DD1A0E9497040E94DC1AC0E08C2F32
+:1035D0000E948D05811104C0CF5FCE30C1F701C0BC
+:1035E00081E0CF9108950E943A140E94C50E0C9478
+:1035F000BA0782E084BD93E095BD9AEF97BD8093B2
+:103600006E0008952FB7F8948091CE019091CF016C
+:10361000A091D001B091D1012FBF0895CF92DF9238
+:10362000EF92FF920F931F932FB7F8944091CE0122
+:103630005091CF016091D0017091D1012FBF6A01EB
+:103640007B01EE24FF248C0120E030E0C016D1067F
+:10365000E206F30610F4415051099A01281B390B78
+:10366000C9011F910F91FF90EF90DF90CF900895C7
+:103670001F920F920FB60F9211248F939F93AF93C7
+:10368000BF938091CE019091CF01A091D001B091D4
+:10369000D1010196A11DB11D8093CE019093CF0160
+:1036A000A093D001B093D101BF91AF919F918F9121
+:1036B0000F900FBE0F901F9018950E94BD0BF894AD
+:1036C0002FEF87EA91E6215080409040E1F700C05B
+:1036D000000087E090EBDC018093EE019093EF0116
+:1036E000A093F001B093F1019CE088E10FB6F8944B
+:1036F000A895809360000FBE90936000FFCFEF927B
+:10370000FF920F931F93CF93DF93D82FC0E08C2F9E
+:103710000E948D0500E010E0E82EF12CC701002E7C
+:1037200002C0959587950A94E2F780FD06C00F5F69
+:103730001F4F0630110591F709C0602F7C2F80E0E4
+:103740000E9455068D13F3CF81E004C0CF5FCE30C9
+:10375000F1F680E0DF91CF911F910F91FF90EF90F4
+:103760000895CF93C82F8CE20E947F1B882321F0FD
+:103770008C2FCF910C947F1B80E0CF910895CF9335
+:103780000E94061D811102C00E94EC1CC5E6C150BA
+:1037900049F00E9497048FE39CE90197F1F700C07C
+:1037A0000000F5CF89E20E94B11B811113C18AE2AA
+:1037B0000E94B11B81110E94EC1C85E00E94B11B8C
+:1037C00081110E945D1B0E94111D8093CD0187E035
+:1037D0000E94B11B8823A9F18BE10E94B11B8823B1
+:1037E00051F08091CD0181FB222720F991E09227B1
+:1037F00090FB81F90EC08EE00E94B11B882361F01E
+:103800008091CD0182FB222720F991E0922790FB45
+:1038100082F98093CD0115C080E10E94B11B909187
+:10382000CD01882341F093FB222720F981E08227F4
+:1038300080FB93F904C0892F809580FB90F99093C9
+:10384000CD018091CD010E94151D0E94231D809302
+:10385000DF0180EE0E94B11B882341F08091DF01DF
+:10386000982F909590FB80F98093DF0189E30E9467
+:10387000B11B882359F08091DF0181FB222720F9B9
+:1038800091E0922790FB81F98093DF0182EE0E9404
+:10389000B11B882359F08091DF0182FB222720F998
+:1038A00091E0922790FB82F98093DF0186EE0E94DF
+:1038B000B11B882359F08091DF0183FB222720F977
+:1038C00091E0922790FB83F98093DF0183EE0E94C1
+:1038D000B11B882359F08091DF0184FB222720F956
+:1038E00091E0922790FB84F98093DF0185E30E94A9
+:1038F000B11B882359F08091DF0185FB222720F935
+:1039000091E0922790FB85F98093DF0181E30E948B
+:10391000B11B882359F08091DF0186FB222720F913
+:1039200091E0922790FB86F98093DF0181E10E946C
+:10393000B11B882359F08091DF0187FB222720F9F2
+:1039400091E0922790FB87F98093DF018091DF015E
+:103950000E94271D8091DF0187FB882780F98093D3
+:103960000D0187E20E94B11BC82F8EE10E94B11B9E
+:103970008111C2608FE10E94B11B8111C46080E29D
+:103980000E94B11B8111C86081E20E94B11B8111AC
+:10399000C06182E20E94B11B8111C06283E20E9479
+:1039A000B11B8111C06484E20E94B11B882311F015
+:1039B000C06802C0CC2329F08C2F0E941E1D6C2FE2
+:1039C00003C00E941A1D682F70E080E090E0CF9144
+:1039D0000C94F117CF9108956DEE7EEF80E090E0AA
+:1039E0000E94662360E082E090E00E94582360E03D
+:1039F00083E090E00E94582360E084E090E00E9421
+:103A0000582360E085E090E00C94582380E090E03B
+:103A10000E94522321E08D3E9E4F09F020E0822F2C
+:103A2000089582E090E00C944A23682F82E090E0B1
+:103A30000C94582383E090E00C944A23682F83E091
+:103A400090E00C94582384E090E00C944A23682F73
+:103A500084E090E00C9458238091D40180FF0BC047
+:103A60006091130185E0689FB001112475956795F9
+:103A7000759567952BC081FF09C06091130185E0A2
+:103A8000689FB00111247595679520C082FF07C01B
+:103A90006091130185E0689FB001112417C09091D7
+:103AA000D5019923D1F060911201961788F72091E2
+:103AB000130185E0289F90011124929FA001939FFC
+:103AC000500D112470E0CA010E941C23603871055A
+:103AD00040F46115710519F406C065E070E0862FA9
+:103AE00008958FE7089581E008958091D40180FFC3
+:103AF00008C06091110170E075956795759567959F
+:103B000021C081FF06C06091110170E07595679535
+:103B100019C082FF04C06091110170E010C0909143
+:103B2000D501992399F0609110019617A0F7809123
+:103B30001101899FC001112470E00E941C2360388C
+:103B4000710540F46115710519F406C061E070E07B
+:103B5000862F08958FE7089581E00895803F21F42E
+:103B60000E942C1D819504C0813F29F40E942C1DC8
+:103B70008093D8010895823F21F40E942C1D8195E5
+:103B800004C0833F29F40E942C1D8093D70108951F
+:103B9000893F19F40E94751D05C08A3F31F40E94C7
+:103BA000751D81958093D90108958B3F21F40E9462
+:103BB000751D819504C08C3F29F40E94751D80936A
+:103BC000DA010895843F21F48091D601816017C005
+:103BD000853F21F48091D601826011C0863F21F497
+:103BE0008091D60184600BC0873F21F48091D6017B
+:103BF000886005C0883F31F48091D6018061809350
+:103C0000D60108958D3F21F48091D40181600BC0CD
+:103C10008E3F21F48091D401826005C08F3F29F44A
+:103C20008091D40184608093D4010895803F39F459
+:103C30008091D80187FF6CC01092D80169C0813F84
+:103C400029F48091D8011816BCF362C09091D70175
+:103C5000823F29F497FF5CC01092D70159C0833F7F
+:103C600019F41916CCF354C0893F41F48091D9015D
+:103C700018160CF04DC01092D9014AC08A3F29F4A1
+:103C80008091D90187FF44C0F6CF8B3F39F48091F2
+:103C9000DA0187FF3DC01092DA013AC08C3F29F467
+:103CA0008091DA011816BCF333C0843F21F480916F
+:103CB000D6018E7F17C0853F21F48091D6018D7F7C
+:103CC00011C0863F21F48091D6018B7F0BC0873FC6
+:103CD00021F48091D601877F05C0883F31F480911F
+:103CE000D6018F7E8093D60113C08D3F21F4809141
+:103CF000D4018E7F0BC08E3F21F48091D4018D7F43
+:103D000005C08F3F29F48091D4018B7F8093D4012B
+:103D10008091D70181110EC08091D80181110AC014
+:103D20008091D901811106C08091DA01811102C010
+:103D30001092D501089586ED91E00E94DC0E0E945C
+:103D4000021B9093D3018093D20108951F93CF93C8
+:103D5000DF938091D2019091D3010E940E1BAC01A0
+:103D60009091D501992321F02091140130E006C0F3
+:103D7000209115018AE0289F9001112442175307D2
+:103D800008F485C08091D701C091D801D091D901A4
+:103D90001091DA01811107C0C11175C0D11173C032
+:103DA000111171C074C09F3F19F09F5F9093D501AE
+:103DB000181624F40E942C1D8093D7018091D701FE
+:103DC00087FF05C00E942C1D81958093D7011C168A
+:103DD00024F40E942C1D8093D8018091D80187FF84
+:103DE00005C00E942C1D81958093D8016091D70158
+:103DF000662331F1C091D801CC2311F1062E000CBD
+:103E0000770B880B990B0E94232223E333E343E3D0
+:103E10005FE30E9487220E94EB216093D7016C2F01
+:103E2000CC0F770B880B990B0E94232223E333E3FB
+:103E300043E35FE30E9487220E94EB216093D80155
+:103E40001D1624F40E94751D8093D9018091D9011B
+:103E500087FF05C00E94751D81958093D9011116B9
+:103E600024F40E94751D8093DA018091DA0187FFA6
+:103E700005C00E94751D81958093DA01DF91CF9175
+:103E80001F910C949B1E9F3F09F08FCFA0CFDF9115
+:103E9000CF911F910895E6EDF1E085E0DF011D92DD
+:103EA0008A95E9F71092D5011092D40108958330D4
+:103EB00081F128F4813059F08230D1F008958530B5
+:103EC00009F449C0B8F1863009F456C008958091CC
+:103ED0001501262F30E0280F311D2F3F310524F426
+:103EE000680F6093150108958FEF80931501089571
+:103EF00080911401262F30E0280F311D2F3F31050E
+:103F000024F4680F6093140108958FEF80931401D7
+:103F1000089580911301262F30E0280F311D2F3F87
+:103F2000310524F4680F6093130108958FEF809397
+:103F30001301089580911201262F30E0280F311DC2
+:103F40002F3F310524F4680F6093120108958FEF1D
+:103F500080931201089580911101262F30E0280FDF
+:103F6000311D2F3F310524F4680F6093110108952E
+:103F70008FEF80931101089580911001262F30E07A
+:103F8000280F311D2F3F310524F4680F6093100175
+:103F900008958FEF809310010895833011F128F474
+:103FA000813049F0823091F00895853081F120F11F
+:103FB0008630C1F1089580911501681720F4861BA1
+:103FC00080931501089510921501089580911401B0
+:103FD000681720F4861B8093140108951092140131
+:103FE000089580911301681720F4861B80931301B4
+:103FF000089510921301089580911201681720F41A
+:10400000861B8093120108951092120108958091E9
+:104010001101681720F4861B8093110108951092F6
+:104020001101089580911001681720F4861B809378
+:10403000100108951092100108950F931F938D3170
+:1040400009F46AC008F03FC08E3009F484C0C0F49F
+:10405000873009F46DC068F4863009F0B5C08091EE
+:10406000CD01817F8E7F8093CD0181E08093DC0143
+:10407000ACC0883009F457C08B3009F46AC0A4C0C2
+:10408000863109F466C078F4803109F477C0813153
+:1040900009F09AC00E943A1490910D0181E089279D
+:1040A00080930D0156C0893109F453C08B3109F05A
+:1040B0008BC08091CD0181FB222720F991E09227CE
+:1040C00090FB81F951C0853309F475C048F48732FB
+:1040D00009F471C008F45EC0893209F46CC074C080
+:1040E000833430F48A3308F053C0883391F16CC0C4
+:1040F000833409F460C0883409F066C00E943A1421
+:104100000FEF13ED20E3015010402040E1F700C015
+:1041100000000E945D1B1DC00E94A5210E94C50ECB
+:104120000E94BA0716C00E94111D0E94231D11C0D3
+:104130009091CD01892F8095817080FB90F929F0B5
+:10414000966098609093CD0140C0997F977F90933F
+:10415000CD0181E03AC08091CD0182FB222720F978
+:1041600091E0922790FB82F98093CD01992389F306
+:104170008091CD0181608093CD01EBCF8091CD0105
+:1041800083FB222720F991E0922790FB83F9ECCF63
+:10419000895301C08D5141E050E060E070E08A0138
+:1041A0009B0104C0000F111F221F331F8A95D2F7F5
+:1041B000C901B80104C061E070E080E090E00E94B5
+:1041C000F1170E943A14C5CF80E01F910F91089516
+:1041D00080E008950C94E820CF93C82F8091DC01F3
+:1041E000813079F018F08230E9F187C0E0910E015A
+:1041F000F0910F018081813169F0823209F07FC036
+:1042000009C0E0910E01F0910F018081813111F020
+:10421000823261F48C2F0E94EA20811104C08C2F1D
+:104220000E941D201DC081E090E01AC08C2F0E94CA
+:10423000E820811114C0C43179F048F4CB3079F012
+:10424000C03109F060C082E08093DC0108C0C9324F
+:1042500019F0C83321F057C01092DC0154C081E03E
+:10426000817053C0C93289F118F5C43171F1A8F4D5
+:10427000C73009F046C08AE08093150194E190931D
+:10428000140193E0909313018093120188E08093CE
+:10429000110188E28093100134C0CE51C63088F5F8
+:1042A000EC2FF0E0E65DFE4F80818093DB0129C0BA
+:1042B000CE34E9F020F4CB3421F56AE013C0C135E7
+:1042C00079F0C235F1F461E00DC08091DB01882303
+:1042D00019F01092DB0115C081E08093DC0115C05C
+:1042E00061E006C08091DB010E94571F0AC06AE0AE
+:1042F0008091DB010E94CD1F04C01092DC0180E0A0
+:1043000004C081E002C080E0ABCFCF910895E1E826
+:10431000F0E08081886080838081816080838FB7B6
+:10432000F89493E09093890090ED909388008FBF6C
+:104330000895EFE6F0E08081826080830895EFE6E3
+:10434000F0E080818D7F80830895EFE6F0E090813A
+:1043500082E08927808308951F920F920FB60F92F3
+:1043600011242F933F934F935F936F937F938F937A
+:104370009F93AF93BF93EF93FF938091DD01909153
+:10438000DE0101969093DE018093DD01811103C06F
+:1043900082E00E94BA07E091DE01E695E695F0E042
+:1043A000E75BFA4FE4918091DD018E1303C080E05A
+:1043B0000E94BA07FF91EF91BF91AF919F918F91AA
+:1043C0007F916F915F914F913F912F910F900FBE11
+:1043D0000F901F9018950E94F2216894B1110C94CF
+:1043E000812208950E94662288F09F5798F0B92F85
+:1043F0009927B751B0F0E1F0660F771F881F991F1A
+:104400001AF0BA95C9F714C0B13091F00E94802219
+:10441000B1E008950C948022672F782F8827B85F29
+:1044200039F0B93FCCF3869577956795B395D9F771
+:104430003EF490958095709561957F4F8F4F9F4F7B
+:104440000895E89409C097FB3EF490958095709587
+:1044500061957F4F8F4F9F4F9923A9F0F92F96E9D0
+:10446000BB279395F695879577956795B795F11145
+:10447000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE2
+:104480008F4F9F4F16C0882311F096E911C07723F4
+:1044900021F09EE8872F762F05C0662371F096E8FD
+:1044A000862F70E060E02AF09A95660F771F881FCC
+:1044B000DAF7880F9695879597F9089557FD9058E4
+:1044C000440F551F59F05F3F71F04795880F97FBD8
+:1044D000991F61F09F3F79F0879508951216130692
+:1044E0001406551FF2CF4695F1DF08C016161706C1
+:1044F0001806991FF1CF86957105610508940895F6
+:10450000E894BB2766277727CB0197F908950E9487
+:104510009A220C940B230E94FD2238F00E9404235F
+:1045200020F0952311F00C94F4220C94FA2211241B
+:104530000C9481220E945E2270F3959FC1F3950F27
+:1045400050E0551F629FF001729FBB27F00DB11D17
+:10455000639FAA27F00DB11DAA1F649F6627B00DA7
+:10456000A11D661F829F2227B00DA11D621F739F90
+:10457000B00DA11D621F839FA00D611D221F749F9E
+:104580003327A00D611D231F849F600D211D822FE5
+:10459000762F6A2F11249F5750409AF0F1F088230C
+:1045A0004AF0EE0FFF1FBB1F661F771F881F915039
+:1045B0005040A9F79E3F510580F00C94F4220C94D2
+:1045C00081225F3FE4F3983ED4F386957795679513
+:1045D000B795F795E7959F5FC1F7FE2B880F911D63
+:1045E0009695879597F9089597F99F6780E870E009
+:1045F00060E008959FEF80EC089500240A94161659
+:10460000170618060906089500240A9412161306C0
+:10461000140605060895092E0394000C11F488234E
+:1046200052F0BB0F40F4BF2B11F460FF04C06F5F6A
+:104630007F4F8F4F9F4F089597FB072E16F40094DE
+:1046400007D077FD09D00E94362307FC05D03EF441
+:10465000909581959F4F0895709561957F4F08952E
+:10466000EE0FFF1F0590F491E02D0994AA1BBB1BD0
+:1046700051E107C0AA1FBB1FA617B70710F0A61B62
+:10468000B70B881F991F5A95A9F780959095BC0183
+:10469000CD010895F999FECF92BD81BDF89A992771
+:1046A00080B50895A8E1B0E042E050E00C946D239D
+:1046B000262FF999FECF1FBA92BD81BD20BD0FB63E
+:1046C000F894FA9AF99A0FBE019608950E94582319
+:1046D000272F0C945923DC01CB01FC01F999FECF63
+:1046E00006C0F2BDE1BDF89A319600B40D9241507A
+:0A46F0005040B8F70895F894FFCF8A
+:1046FA002002BC074C082708F307BF070101BA01CB
+:10470A0028080A03140A3F4D36390A05BD048704EE
+:10471A004E04E103FA0313042C0401020304050600
+:04472A000708090073
+:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/alexjj/readme.md b/keyboard/ergodox_ez/keymaps/alexjj/readme.md
new file mode 100644
index 0000000000..239e32d399
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/alexjj/readme.md
@@ -0,0 +1,179 @@
+Englishman in New York
+===========================
+
+:microphone: :tea:
+
+About
+------
+
+After using the massdrop configurator to get the basics, I wanted to add a
+little extra to my ergodox. Notably the Hyper hotkey, the press and hold,
+and a way to have my beloved £ :pound: symbol available<sup>[1](#unicode)</sup>. Why not switch to a GB
+layout? Well the computers I use are US keymap'd and I can't always change
+that. Plus I've got used to 2/@ and 3/# and moving to the ergodox was hard
+enough. :sweat_smile:
+
+I started from the default and edited from there as I needed. It's somewhat
+similar to a regular layout, particularly R1 and shift/controls. I ended up
+with a few keys that were blank, so I'm testing out some shortcuts. Alt+F4 for
+quitting things in Windows, is one example, but I felt it was better placed on
+the 1st layer - in case of fat fingers.
+
+Layout
+-------
+
+![Layout](rl-layout.jpg "Isn't it lovely")
+
+### Base Layer
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| ESC | 1! | 2@ | 3# | 4$ | 5% | 6^ | | 7& | 8* | 9( | 0) | -_ | += | BkSp |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | |\ |
+|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
+| Win | A | S | D | F | G |------| |------| H | J | K | L | :; | '" |
+|--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
+| LShift |Z/Alt | X | C | V | B | | | | N | M | , | . | Alt | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ |LCtrl | COPY | PASTE| Left | Right| | Down | Up |Hyper | `~ | RCtrl |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ Hyper = Ctrl+Super+Alt+Shift | ~L3 | F5 | | F2 | ~L2 |
+ ,------|------|------| |------+------+------.
+ | | | PgUp | | Ins | | |
+ | Enter| BkSp |------| |------| ~L1 |Space |
+ | | | PgDn | | Del | | |
+ `--------------------' `--------------------'
+```
+
+### Symbol Layer
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |PrintScr|
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | £ | | | | | | . | 0 | = |Alt+F4|
+ `----------------------------------' `----------------------------------'
+ ↑ ,-------------. ,-------------.
+ THERE! | | | | | |
+ ,------|------|------| |------+------+------.
+ CAD = Ctrl + Alt + Delete | | | | | | | |
+ | | |------| |------| | |
+ | | | | | CAD | | |
+ `--------------------' `--------------------'
+```
+### Media Layer
+
+Not touched this, not used either.
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| TEENSY | | | | | | | | | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | | | MsUp | | | | | | | | | | | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | | | | | | | | | Prev | Next | | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ | | | | | | |Brwser|
+ | | |------| |------| |Back |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+### Unicode Layer
+
+Used to enter/test unicode input on Windows. All numbers are numpad keys.
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| Alt | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | + | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Alt | | | E | | | | | | | 7 | 8 | 9 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Alt | A | | D | F | |------| |------| | 4 | 5 | 6 | + | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| Alt | | | C | | B | | | | | 1 | 2 | 3 | + | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | Alt | Alt | Alt | | | | 0 | 0 | 0 | + | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ WINDOWS ONLY SETUP!! | ~L3 | | | | |
+ ,------|------|------| |------+------+------.
+ | | | | | | | |
+ | Alt | Alt |------| |------| Alt | Alt |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+
+Usage
+------
+
+~L1 / L2 / L3 will momentarily switch to a layer if held and another key is pressed.
+If pressed and released will remain on layer until pressed again.
+
+### Unicode
+
+This layout is for Windows only. To enter a character Press and Hold Alt, type + and hex code then release Alt.
+
+Changelog
+-----------
+
+### [0.2.1] - 2016-04-05
+
+* Changed £ to alt code in Windows. Windows sucks at unicode.
+
+### [0.2.0] - 2016-03-27
+
+* Added unicode layer
+* Moved Copy/Paste to left hand side
+* Switched Enter and Space (again)
+* Added L3 (unicode layer) toggle
+* Removed Press and Hold for Alt on right hand size (/)
+* Swapped Volume Up/Down to match arrows
+* Tried fixing £ macro
+* Removed * in the matrix function things (upstream change)
+
+### [0.1.1] - 2016-03-23
+
+* Changed £ input to a macro
+
+
+### [0.1.0] - 2016-03-22
+
+After actually using the keyboard, I've made some changes:
+
+* Swapped Enter and Space
+* Moved backspace to thumb keys (top right still remains)
+* Added Ctrl+Alt+Delete
+* Added Teensy Reset on 2nd layer
+* Switched Up and Down
+* Changed copy/paste to be Ctrl+c and Ctrl+v as KC_COPY/PASTE didn't work (in Windows)
+* Moved ~L2 to replace +L1 after learning how the function works (notes above)
+* Hopefully fixed GBP symbol (unicode enabled in MakeFile)
+
+### [0.0.1] - 2016-03-21
+
+First version
+
+
+Issues
+-------
+
+Space for feedback and notes for future improvements
+
+----
+<sup><a name="unicode">1</a></sup>: For Windows only, and you have to edit the [registry](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input).
diff --git a/keyboard/ergodox_ez/keymaps/alexjj/rl-layout.jpg b/keyboard/ergodox_ez/keymaps/alexjj/rl-layout.jpg
new file mode 100644
index 0000000000..e4e92bf464
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/alexjj/rl-layout.jpg
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png
index b32b95533c..d5d00f2403 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt
index 727775ea2c..046b75786a 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt
@@ -1,8 +1,8 @@
[{x:3.5},"#\n3",{x:10.5},"*\n8"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
-[{y:-0.875,c:"#73ab6a",w:1.5},"~\n\n\n\n\n\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{t:"#000000\n\n\n\n#0000ff",w:1.5},"+\n\n\n\n\n\n="],
-[{y:-0.375,x:3.5,t:"#000000"},"E",{x:10.5},"I"],
+[{y:-0.875,c:"#73ab6a",w:1.5},"~\n\n\n\n\n\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{w:1.5},"+\n\n\n\n\n\n="],
+[{y:-0.375,x:3.5},"E",{x:10.5},"I"],
[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
[{y:-0.875,c:"#73ab6a",w:1.5},"Tab",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",fa:[0,0,0,1],w:1.5},"|\n\\\nMedia\nL2"],
@@ -14,7 +14,7 @@
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\nShift",{c:"#cccccc"},"Z\n\nCtrl",{x:14.5},"?\n/\nCtrl",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/readme.md b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
index 1cfea06dd0..6534f481a1 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/readme.md
+++ b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
@@ -1,9 +1,63 @@
-# The Ordinary Layout, a familiar and powerful layout
+# The Ordinary Layout, a familiar and powerful layout #
-The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards and features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
+The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
-Full details about the rationale behind this layout [are available](http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html).
+The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards.
+
+Nicholas Keene
+ordinarylayout@nicholaskeene.com
+no rights reserved, use for any purposes, credit me if you are a nice person
+
+## The Base Layout ##
+
+* The yellow keys are text navigation and manipulation
+* The dark blue keys are shift keys: case shift (traditional shift), symbol shift, and media shift
+* The light blue keys are modifiers: traditional Control, Option, and C ommand keys, plus Hyper and Meh
+* The two green keys, tab and tilde, are in the typical places to ease use of the Application Switcher
+* The red keys is Escape, one of the few buttons which is in an atypical position
![Ordinary base layout](ordinary-base.png)
+
+This layout puts the modifier keys along the bottom of the keyboard where they are on most layouts. They are in the regular order, with the addition of Hyper and Meh keys. The shift key (case shift) is in the prevalent location. The primo slots usually wasted on Caps Lock and Enter are instead used for the Symbol Shift key which promotes use of the Symbols layer. On the right side of the layout, the Symbol and Media shift keys also double as character keys -- quote and backslash, respectively -- so that touch typists can continue to find those punctuation marks in the right place.
+
+Other than the yellow keys, the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway, so only Escape really requires retraining of muscle memory.
+
+The four big yellow keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me!; I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
+
+The Forward Tab and Backward Tab keys are there mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
+
+## The Symbols Layout ##
+
+* The periwinkle keys are the eponymous symbols
+* The gray keys are F-Keys
+* The green keys are a proper number pad
+* The red Escape key is found in the "right" location on this layer
+* The yellow keys are the *reverse* of the yellow keys on the base layer
+* The dark blue Media key means that the Media layer is accessible with the left hand
+
![Ordinary symbol layout](ordinary-symbol.png)
+
+The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout.
+
+The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements:
+* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers.
+* The slash, backslash, and pipe characters are grouped together as a memory aid.
+* The & and | symbols are juxtaposed as a memory aid
+
+The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads. This layout also has an Enter key, and importantly the key codes emitted by this number pad are *number pad specific key codes*, not regular keyboard key codes. Some software distinguishes keypad codes so users now have access to a fully realized number pad when using The Ordinary Layout.
+
+The Escape key's true home is in the top left corner of the keyboard, so on this layer it can be found there. And on the Symbols layer, the Tab key switches to become a Media key, so press Symbols then Media to access the Media layer using the left hand.
+
+Finally, consider the yellow text-nav keys. In the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the yellow keys, and Enter is right where it should be.
+
+## The Media Layout ##
+
+* The light turquoise keys move the mouse or the text cursor
+* The dark turquoise keys scroll
+* The light purple keys signal Web and Audio applications
+* The dark purple keys signal the operating system
+* The red Escape key is, again, found in the "right" location
+
![Ordinary media layout](ordinary-media.png)
+
+This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 5099b65817..7846707848 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -60,13 +60,9 @@ const uint16_t PROGMEM fn_actions[] = {
float start_up[][2] = {
{440.0*pow(2.0,(67)/12.0), 600},
- {0, 50},
{440.0*pow(2.0,(64)/12.0), 400},
- {0, 50},
{440.0*pow(2.0,(55)/12.0), 400},
- {0, 50},
{440.0*pow(2.0,(60)/12.0), 400},
- {0, 50},
{440.0*pow(2.0,(64)/12.0), 1000},
};
@@ -91,6 +87,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
- play_notes(&start_up, 9, false);
+ play_notes(&start_up, 5, false);
#endif
}
diff --git a/keyboard/preonic/keymaps/nerdgasm/README.md b/keyboard/preonic/keymaps/nerdgasm/README.md
new file mode 100644
index 0000000000..d2f43bbdb8
--- /dev/null
+++ b/keyboard/preonic/keymaps/nerdgasm/README.md
@@ -0,0 +1,34 @@
+# 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/preonic/keymaps/nerdgasm/keymap.c b/keyboard/preonic/keymaps/nerdgasm/keymap.c
new file mode 100644
index 0000000000..818102fbdc
--- /dev/null
+++ b/keyboard/preonic/keymaps/nerdgasm/keymap.c
@@ -0,0 +1,117 @@
+// 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 "preonic.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 _DV 2
+#define _LW 3
+#define _RS 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+ {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_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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {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_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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {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}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Guitar Notes
+#define N_E 13180.5
+#define N_B 9870.8
+#define N_G 15680.0
+#define N_D 11740.7
+#define N_E 13180.5
+
+float start_up[][2] = {
+ { N_E, 500 },
+ { 0, 50 },
+ { N_E, 500 },
+ { 0, 50 },
+ { N_E, 500 },
+ { 0, 50 },
+ { N_B, 500 },
+ { 0, 50 },
+ { N_E, 1000 },
+ { 0, 50 },
+ { N_G, 1500 },
+ { 0, 50 },
+};
+
+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;
+};
+
+void matrix_init_user(void) {
+#ifdef AUDIO_ENABLE
+ init_notes();
+ play_notes(&start_up, 12, false);
+#endif
+}
+
+void process_action_user(keyrecord_t *record) {
+#ifdef AUDIO_ENABLE
+ if (record->event.pressed) {
+ float keypress[][2] = {
+ {440.0*pow(2.0,(record->event.key.col*7)/12.0), 600}
+ };
+ play_notes(&keypress, 1, false);
+ }
+#endif
+}
diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c
index e9ececb6d8..f639f247a5 100644
--- a/keyboard/preonic/preonic.c
+++ b/keyboard/preonic/preonic.c
@@ -10,6 +10,11 @@ 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();
@@ -30,3 +35,7 @@ void matrix_init_kb(void) {
void matrix_scan_kb(void) {
matrix_scan_user();
};
+
+void process_action_kb(keyrecord_t *record) {
+ process_action_user(record);
+} \ No newline at end of file
diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h
index 6cfe14726a..51ed9ba393 100644
--- a/keyboard/preonic/preonic.h
+++ b/keyboard/preonic/preonic.h
@@ -46,5 +46,6 @@
void matrix_init_user(void);
void matrix_scan_user(void);
+void process_action_kb(keyrecord_t *record);
#endif