aboutsummaryrefslogtreecommitdiffstats
path: root/keyboard
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard')
-rw-r--r--keyboard/atomic/atomic.c265
-rw-r--r--keyboard/atomic/atomic.h24
-rw-r--r--keyboard/atomic/keymaps/pvc/config.h6
-rw-r--r--keyboard/atomic/keymaps/pvc/keymap.c386
-rw-r--r--keyboard/atomic/keymaps/pvc/makefile.mk2
-rw-r--r--keyboard/atreus/config.h2
-rw-r--r--keyboard/ergodox_ez/Makefile16
-rw-r--r--keyboard/ergodox_ez/keymaps/adnw/k_o_y/k_o_y.hex1152
-rw-r--r--keyboard/ergodox_ez/keymaps/adnw/k_o_y/keymap.c185
-rw-r--r--keyboard/ergodox_ez/keymaps/adnw/k_o_y/readme.md7
-rw-r--r--keyboard/ergodox_ez/keymaps/default_osx/keymap.c6
-rw-r--r--keyboard/ergodox_ez/keymaps/erez_experimental/config_user.h8
-rw-r--r--keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex2243
-rw-r--r--keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c109
-rw-r--r--keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk5
-rw-r--r--keyboard/ergodox_ez/keymaps/erez_experimental/readme.md8
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/keymap.c706
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.pngbin99031 -> 99605 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt4
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.pngbin121014 -> 124144 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt20
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.pngbin0 -> 63065 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.txt27
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.pngbin103401 -> 103735 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt8
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex2380
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/readme.md37
-rw-r--r--keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c239
-rw-r--r--keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental.hex1247
-rw-r--r--keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.pngbin289029 -> 303904 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/osx_de_experimental/readme.md22
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/config.h92
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/keymap.c285
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/makefile.mk4
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/readme.md77
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex1166
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_base.pngbin0 -> 785859 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_fn.pngbin0 -> 390041 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.pngbin0 -> 424425 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/twey/keymap.c40
-rw-r--r--keyboard/ergodox_ez/keymaps/twey/readme.md12
-rw-r--r--keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c23
-rw-r--r--keyboard/gh60_rev_c/gh60.c7
-rw-r--r--keyboard/gh60_rev_c/gh60.h2
-rw-r--r--keyboard/planck/keymaps/alexey/alexey.c (renamed from keyboard/planck/keymaps/alexey.c)0
-rw-r--r--keyboard/planck/keymaps/angerthosenear/angerthosenear.c (renamed from keyboard/planck/keymaps/angerthosenear.c)0
-rw-r--r--keyboard/planck/keymaps/austin/austin.c (renamed from keyboard/planck/keymaps/austin.c)0
-rw-r--r--keyboard/planck/keymaps/bone2planck/bone2planck.c (renamed from keyboard/planck/keymaps/bone2planck.c)0
-rw-r--r--keyboard/planck/keymaps/brandon/brandon.c (renamed from keyboard/planck/keymaps/brandon.c)0
-rw-r--r--keyboard/planck/keymaps/charlie/charlie.c (renamed from keyboard/planck/keymaps/charlie.c)0
-rw-r--r--keyboard/planck/keymaps/daniel/daniel.c (renamed from keyboard/planck/keymaps/daniel.c)0
-rw-r--r--keyboard/planck/keymaps/david/david.c (renamed from keyboard/planck/keymaps/david.c)0
-rw-r--r--keyboard/planck/keymaps/default/keymap.c106
-rw-r--r--keyboard/planck/keymaps/dzobert/dzobert.c (renamed from keyboard/planck/keymaps/dzobert.c)0
-rw-r--r--keyboard/planck/keymaps/experimental/README.md2
-rw-r--r--keyboard/planck/keymaps/experimental/keymap.c333
-rw-r--r--keyboard/planck/keymaps/experimental/makefile.mk5
-rw-r--r--keyboard/planck/keymaps/gabriel/gabriel.c (renamed from keyboard/planck/keymaps/gabriel.c)0
-rw-r--r--keyboard/planck/keymaps/jacob/Keyboard Layout.PNGbin0 -> 17292 bytes
-rw-r--r--keyboard/planck/keymaps/jacob/keymap.c56
-rw-r--r--keyboard/planck/keymaps/jacob/readme.md1
-rw-r--r--keyboard/planck/keymaps/joe/joe.c (renamed from keyboard/planck/keymaps/joe.c)0
-rw-r--r--keyboard/planck/keymaps/kyle/kyle.c (renamed from keyboard/planck/keymaps/kyle.c)0
-rw-r--r--keyboard/planck/keymaps/leo/leo.c (renamed from keyboard/planck/keymaps/leo.c)0
-rw-r--r--keyboard/planck/keymaps/lucas/lucas.c (renamed from keyboard/planck/keymaps/lucas.c)0
-rw-r--r--keyboard/planck/keymaps/lukas/lukas.c (renamed from keyboard/planck/keymaps/lukas.c)0
-rw-r--r--keyboard/planck/keymaps/max/max.c (renamed from keyboard/planck/keymaps/max.c)0
-rw-r--r--keyboard/planck/keymaps/mollat/mollat.c (renamed from keyboard/planck/keymaps/mollat.c)0
-rw-r--r--keyboard/planck/keymaps/monkey/monkey.c (renamed from keyboard/planck/keymaps/monkey.c)0
-rw-r--r--keyboard/planck/keymaps/nico/nico.c (renamed from keyboard/planck/keymaps/nico.c)0
-rw-r--r--keyboard/planck/keymaps/numpad/numpad.c (renamed from keyboard/planck/keymaps/numpad.c)0
-rw-r--r--keyboard/planck/keymaps/pete/README.md14
-rw-r--r--keyboard/planck/keymaps/pete/keymap.c223
-rw-r--r--keyboard/planck/keymaps/pete/makefile.mk2
-rw-r--r--keyboard/planck/keymaps/pvc/config.h2
-rw-r--r--keyboard/planck/keymaps/pvc/keymap.c17
-rw-r--r--keyboard/planck/keymaps/pvc/makefile.mk7
-rw-r--r--keyboard/planck/keymaps/tak3over/tak3over.c (renamed from keyboard/planck/keymaps/tak3over.c)0
-rw-r--r--keyboard/planck/keymaps/unicode/keymap.c326
-rw-r--r--keyboard/planck/keymaps/unicode/makefile.mk1
-rw-r--r--keyboard/planck/planck.c229
-rw-r--r--keyboard/planck/planck.h34
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c93
-rw-r--r--keyboard/preonic/preonic.c8
-rw-r--r--keyboard/preonic/preonic.h16
85 files changed, 9090 insertions, 3207 deletions
diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c
index 399649716..fa218a48f 100644
--- a/keyboard/atomic/atomic.c
+++ b/keyboard/atomic/atomic.c
@@ -2,27 +2,28 @@
__attribute__ ((weak))
void matrix_init_user(void) {
- // leave this function blank - it can be defined in a keymap file
+ // leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void matrix_scan_user(void) {
- // leave this function blank - it can be defined in a keymap file
+ // leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
-void process_action_user(keyrecord_t *record) {
- // leave this function blank - it can be defined in a keymap file
+bool process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+ return true;
}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
- // leave this function blank - it can be defined in a keymap file
+ // leave this function blank - it can be defined in a keymap file
}
void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
@@ -35,31 +36,39 @@ void matrix_init_kb(void) {
DDRE |= (1<<6);
PORTE |= (1<<6);
- matrix_init_user();
+ matrix_init_user();
}
void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
- matrix_scan_user();
+ matrix_scan_user();
}
-void process_action_kb(keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
+bool process_action_kb(keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
- process_action_user(record);
+ return process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- led_set_user(usb_led);
+ led_set_user(usb_led);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
+#define BREATHING_NO_HALT 0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON 2
+
+static uint8_t breath_intensity;
+static uint8_t breath_speed;
+static uint16_t breathing_index;
+static uint8_t breathing_halt;
void backlight_init_ports()
{
@@ -67,54 +76,250 @@ void backlight_init_ports()
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
-
- // Use full 16-bit resolution.
+
+ // Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
-
+
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
-
+
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
+ breathing_defaults();
}
void backlight_set(uint8_t level)
{
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
+
+ // Set the brightness to 0
CHANNEL = 0x0;
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
}
- else if ( level == BACKLIGHT_LEVELS )
+ else if ( level >= BACKLIGHT_LEVELS )
{
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
- // Set the brightness
+
+ // Set the brightness to max
CHANNEL = 0xFFFF;
}
- else
+ else
{
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
+
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
+ breathing_intensity_default();
+}
+
+
+void breathing_enable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint (brightest point)
+ breathing_index = 0x20 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_pulse(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_HALT_ON;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_disable(void)
+{
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ backlight_set(get_backlight_level());
+}
+
+void breathing_self_disable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_halt = BREATHING_HALT_OFF;
+ }
+ else
+ {
+ breathing_halt = BREATHING_HALT_ON;
+ }
+
+ //backlight_set(get_backlight_level());
+}
+
+void breathing_toggle(void)
+{
+ if (!is_breathing())
+ {
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+ }
+
+ // Toggle breathing interrupt
+ TIMSK1 ^= _BV(OCIE1A);
+
+ // Restore backlight level
+ if (!is_breathing())
+ {
+ backlight_set(get_backlight_level());
+ }
+}
+
+bool is_breathing(void)
+{
+ return (TIMSK1 && _BV(OCIE1A));
+}
+
+void breathing_intensity_default(void)
+{
+ //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
+ breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
+}
+
+void breathing_intensity_set(uint8_t value)
+{
+ breath_intensity = value;
+}
+
+void breathing_speed_default(void)
+{
+ breath_speed = 4;
+}
+
+void breathing_speed_set(uint8_t value)
+{
+ bool is_breathing_now = is_breathing();
+ uint8_t old_breath_speed = breath_speed;
+
+ if (is_breathing_now)
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ breath_speed = value;
+
+ if (is_breathing_now)
+ {
+ // Adjust index to account for new speed
+ breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+ }
+
+}
+
+void breathing_speed_inc(uint8_t value)
+{
+ if ((uint16_t)(breath_speed - value) > 10 )
+ {
+ breathing_speed_set(0);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed - value);
+ }
+}
+
+void breathing_speed_dec(uint8_t value)
+{
+ if ((uint16_t)(breath_speed + value) > 10 )
+ {
+ breathing_speed_set(10);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed + value);
+ }
+}
+
+void breathing_defaults(void)
+{
+ breathing_intensity_default();
+ breathing_speed_default();
+ breathing_halt = BREATHING_NO_HALT;
+}
+
+/* Breathing Sleep LED brighness(PWM On period) table
+ * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
+ *
+ * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
+ * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
+ */
+static const uint8_t breathing_table[64] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
+ 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
+255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
+ 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+ISR(TIMER1_COMPA_vect)
+{
+ // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
+
+
+ uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
+
+ if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
+
}
+
+
#endif \ No newline at end of file
diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h
index 0c7aeb1cc..456c3fbdf 100644
--- a/keyboard/atomic/atomic.h
+++ b/keyboard/atomic/atomic.h
@@ -1,11 +1,7 @@
#ifndef ATOMIC_H
#define ATOMIC_H
-#include "matrix.h"
-#include "keymap_common.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
-#endif
+#include "quantum.h"
#include <stddef.h>
#include <avr/io.h>
@@ -29,8 +25,24 @@
void matrix_init_user(void);
void matrix_scan_user(void);
-void process_action_user(keyrecord_t *record);
+bool process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
void backlight_init_ports(void);
+void breathing_enable(void);
+void breathing_pulse(void);
+void breathing_disable(void);
+void breathing_self_disable(void);
+void breathing_toggle(void);
+bool is_breathing(void);
+
+
+void breathing_defaults(void);
+void breathing_intensity_default(void);
+void breathing_speed_default(void);
+void breathing_speed_set(uint8_t value);
+void breathing_speed_inc(uint8_t value);
+void breathing_speed_dec(uint8_t value);
+
+
#endif \ No newline at end of file
diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h
index cc9263464..5e956286b 100644
--- a/keyboard/atomic/keymaps/pvc/config.h
+++ b/keyboard/atomic/keymaps/pvc/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define PRODUCT_ID 0x0419
#define DEVICE_VER 0x0001
#define MANUFACTURER Ortholinear Keyboards
#define PRODUCT The Atomic Keyboard
@@ -158,4 +158,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
+
+//#define VIBRATO_ENABLE
+//#define VIBRATO_STRENGTH_ENABLE
+
#endif
diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c
index e17c41e23..8431654d7 100644
--- a/keyboard/atomic/keymaps/pvc/keymap.c
+++ b/keyboard/atomic/keymaps/pvc/keymap.c
@@ -8,42 +8,44 @@
#include "song_list.h"
#endif
-#define LAYER_QWERTY 0
-#define LAYER_COLEMAK 1
-#define LAYER_DVORAK 2
-#define LAYER_LOWER 3
-#define LAYER_RAISE 4
-#define LAYER_FUNCTION 5
-#define LAYER_MOUSE 6
-#define LAYER_MUSIC 7
-#define LAYER_ADJUST 8
-
-#define MACRO_QWERTY 0
-#define MACRO_COLEMAK 1
-#define MACRO_DVORAK 2
-#define MACRO_LOWER 3
-#define MACRO_RAISE 4
-#define MACRO_FUNCTION 5
-#define MACRO_MOUSE 6
-#define MACRO_TIMBRE_1 7
-#define MACRO_TIMBRE_2 8
-#define MACRO_TIMBRE_3 9
-#define MACRO_TIMBRE_4 10
-#define MACRO_TEMPO_U 11
-#define MACRO_TEMPO_D 12
-#define MACRO_TONE_DEFAULT 13
-#define MACRO_MUSIC_ON 14
-#define MACRO_MUSIC_OFF 15
-#define MACRO_AUDIO_ON 16
-#define MACRO_AUDIO_OFF 17
-#define MACRO_INC_VOICE 18
-#define MACRO_DEC_VOICE 19
+#define LAYER_QWERTY 0
+#define LAYER_COLEMAK 1
+#define LAYER_DVORAK 2
+#define LAYER_UPPER 3
+#define LAYER_LOWER 4
+#define LAYER_FUNCTION 5
+#define LAYER_MOUSE 6
+#define LAYER_ADJUST 7
+
+#define MACRO_QWERTY 0
+#define MACRO_COLEMAK 1
+#define MACRO_DVORAK 2
+#define MACRO_UPPER 3
+#define MACRO_LOWER 4
+#define MACRO_FUNCTION 5
+#define MACRO_MOUSE 6
+#define MACRO_TIMBRE_1 7
+#define MACRO_TIMBRE_2 8
+#define MACRO_TIMBRE_3 9
+#define MACRO_TIMBRE_4 10
+#define MACRO_TEMPO_U 11
+#define MACRO_TEMPO_D 12
+#define MACRO_TONE_DEFAULT 13
+#define MACRO_MUSIC_TOGGLE 14
+#define MACRO_AUDIO_TOGGLE 16
+#define MACRO_INC_VOICE 18
+#define MACRO_DEC_VOICE 19
+#define MACRO_BACKLIGHT 20
+#define MACRO_BREATH_TOGGLE 21
+#define MACRO_BREATH_SPEED_INC 23
+#define MACRO_BREATH_SPEED_DEC 24
+#define MACRO_BREATH_DEFAULT 25
#define M_QWRTY M(MACRO_QWERTY)
#define M_COLMK M(MACRO_COLEMAK)
#define M_DVORK M(MACRO_DVORAK)
+#define M_UPPER M(MACRO_UPPER)
#define M_LOWER M(MACRO_LOWER)
-#define M_RAISE M(MACRO_RAISE)
#define M_FUNCT M(MACRO_FUNCTION)
#define M_MOUSE M(MACRO_MOUSE)
#define TIMBR_1 M(MACRO_TIMBRE_1)
@@ -53,12 +55,15 @@
#define TMPO_UP M(MACRO_TEMPO_U)
#define TMPO_DN M(MACRO_TEMPO_D)
#define TMPO_DF M(MACRO_TONE_DEFAULT)
+#define M_BACKL M(MACRO_BACKLIGHT)
+#define M_BRTOG M(MACRO_BREATH_TOGGLE)
+#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
+#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
+#define M_BDFLT M(MACRO_BREATH_DEFAULT)
-#define MUS_ON M(MACRO_MUSIC_ON)
-#define MUS_OFF M(MACRO_MUSIC_OFF)
-#define AUD_OFF M(MACRO_AUDIO_OFF)
-#define AUD_ON M(MACRO_AUDIO_ON)
+//#define MU_TOG M(MACRO_MUSIC_TOGGLE)
+//#define AU_TOG M(MACRO_AUDIO_TOGGLE)
#define VC_UP M(MACRO_INC_VOICE)
#define VC_DOWN M(MACRO_DEC_VOICE)
@@ -74,6 +79,7 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
+#define OS_SHFT KC_FN0
#define _______ KC_TRNS
#define XXXXXXX KC_NO
@@ -92,16 +98,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
+ * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [LAYER_QWERTY] = { /* QWERTY */
+ [LAYER_QWERTY] = { // QWERTY
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
{ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
},
/* COLEMAK
@@ -114,17 +120,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
+ * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [LAYER_COLEMAK] = { /* COLEMAK */
+ [LAYER_COLEMAK] = { // COLEMAK
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
{ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
- },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
+},
/* DVORAK
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
@@ -136,36 +142,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
+ * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [LAYER_DVORAK] = { /* DVORAK */
+ [LAYER_DVORAK] = { // DVORAK
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, 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_SLSH, KC_EQL, KC_BSLS, KC_DEL },
{ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
},
+/* UPPER
+ * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+ * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | - | NUM LK | SCR LK | XXXXXX . PAUSE |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | + | ~ | | | INS |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+ * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | ` | XXXXXX . | HOME |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+ * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END |
+ * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | 0 | | RALT | . | ENTER | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
- [LAYER_LOWER] = { /* LOWERED */
- { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
- { _______, _______, _______, _______, SC_CCLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME },
- { _______, SC_REDO, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END },
- { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ },
+ [LAYER_UPPER] = { // UPPER
+ { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS },
+ { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
+ { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME },
+ { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END },
+ { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ },
},
- [LAYER_RAISE] = { /* RAISED */
- { KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
- { _______, _______, _______, _______, SC_ACLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
- { _______, SC_SELA, SC_SAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME },
- { _______, SC_UNDO, SC_CUT, SC_COPY, SC_PSTE, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END },
+/* LOWER
+ * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+ * | | ^ | * | + | - | ; | : | _ | ' | " | ` | | XXXXXX . | HOME |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+ * | | | | & | ! | ~ | / | \ | = | < | > | ? | XXXXXX . | | END |
+ * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [LAYER_LOWER] = { // LOWER
+ { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
+ { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS },
+ { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME },
+ { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END },
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
},
- [LAYER_FUNCTION] = { /* FUNCTION */
+ [LAYER_FUNCTION] = { // FUNCTION
{ KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
{ KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS },
{ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR },
@@ -175,7 +208,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#ifdef MOUSEKEY_ENABLE
- [LAYER_MOUSE] = { /* MOUSE */
+ [LAYER_MOUSE] = { // MOUSE
{ _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U },
@@ -185,25 +218,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#endif
- [LAYER_MUSIC] = { /* MUSIC */
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- },
-
- [LAYER_ADJUST] = { /* ADJUST */
- { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF, ________________ },
+ [LAYER_ADJUST] = { // ADJUST
+ { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ },
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
- { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ },
- { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ },
+ { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ },
+ { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ },
},
/*
- [LAYER_EMPTY] = {
+ [LAYER_EMPTY] = { // LAYER
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
@@ -225,13 +250,14 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
float tone_music_on[][2] = SONG(DOE_A_DEER);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
#endif /* AUDIO_ENABLE */
@@ -242,6 +268,7 @@ void persistant_default_layer_set(uint16_t default_layer)
}
const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -251,13 +278,41 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
switch(id)
{
+ case MACRO_BREATH_TOGGLE:
+ if (record->event.pressed)
+ {
+ breathing_toggle();
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_INC:
+ if (record->event.pressed)
+ {
+ breathing_speed_inc(1);
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_DEC:
+ if (record->event.pressed)
+ {
+ breathing_speed_dec(1);
+ }
+ break;
+
+ case MACRO_BREATH_DEFAULT:
+ if (record->event.pressed)
+ {
+ breathing_defaults();
+ }
+ break;
+
case MACRO_QWERTY:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_QWERTY);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
}
break;
@@ -265,9 +320,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_COLEMAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
}
break;
@@ -275,45 +330,53 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_DVORAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
+ #endif /* AUDIO_ENABLE */
}
break;
- case MACRO_LOWER:
+ case MACRO_UPPER:
if (record->event.pressed)
{
- layer_on(LAYER_LOWER);
- update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ layer_on(LAYER_UPPER);
+ breathing_speed_set(2);
+ breathing_pulse();
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
else
{
- layer_off(LAYER_LOWER);
- update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ layer_off(LAYER_UPPER);
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
break;
- case MACRO_RAISE:
+ case MACRO_LOWER:
if (record->event.pressed)
{
- layer_on(LAYER_RAISE);
- update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ layer_on(LAYER_LOWER);
+ breathing_speed_set(2);
+ breathing_pulse();
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
else
{
- layer_off(LAYER_RAISE);
- update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+ layer_off(LAYER_LOWER);
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
break;
case MACRO_FUNCTION:
if (record->event.pressed)
{
+ breathing_speed_set(3);
+ breathing_enable();
layer_on(LAYER_FUNCTION);
}
else
{
+ breathing_speed_set(1);
+ breathing_self_disable();
layer_off(LAYER_FUNCTION);
}
break;
@@ -363,45 +426,37 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
break;
- case MACRO_AUDIO_OFF:
- if (record->event.pressed)
- {
- #ifdef AUDIO_ENABLE
- audio_off();
- #endif
- }
- break;
-
- case MACRO_AUDIO_ON:
+/*
+ case MACRO_AUDIO_TOGGLE:
if (record->event.pressed)
{
- #ifdef AUDIO_ENABLE
- audio_on();
- PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
- #endif
+ if (is_audio_on())
+ {
+ audio_off();
+ }
+ else
+ {
+ audio_on();
+ PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+ }
}
break;
- case MACRO_MUSIC_ON:
+ case MACRO_MUSIC_TOGGLE:
if (record->event.pressed)
{
- #ifdef AUDIO_ENABLE
+ if (IS_LAYER_ON(LAYER_MUSIC))
+ {
+ layer_off(LAYER_MUSIC);
+ stop_all_notes();
+ }
+ else
+ {
PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
layer_on(LAYER_MUSIC);
- #endif
- }
- break;
-
- case MACRO_MUSIC_OFF:
- if (record->event.pressed)
- {
- #ifdef AUDIO_ENABLE
- layer_off(LAYER_MUSIC);
- stop_all_notes();
- #endif
+ }
}
break;
-
case MACRO_INC_VOICE:
if (record->event.pressed)
{
@@ -421,9 +476,18 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
#endif
}
break;
+*/
#endif /* AUDIO_ENABLE */
+#ifdef BACKLIGHT_ENABLE
+ case MACRO_BACKLIGHT:
+ if (record->event.pressed)
+ {
+ backlight_step();
+ }
+#endif
+
default:
break;
@@ -434,8 +498,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
#ifdef AUDIO_ENABLE
-
-void process_action_user(keyrecord_t *record)
+/*
+bool process_action_user(keyrecord_t *record)
{
uint8_t starting_note = 0x0C;
@@ -453,7 +517,7 @@ void process_action_user(keyrecord_t *record)
}
}
}
-
+*/
void matrix_init_user(void)
{
@@ -468,36 +532,40 @@ void led_set_user(uint8_t usb_led)
_delay_ms(10); // gets rid of tick
- if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
- {
- // If CAPS LK LED is turning on...
- PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
- }
- else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
- {
- // If CAPS LK LED is turning off...
- PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
- }
- else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
- {
- // If NUM LK LED is turning on...
- PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
- }
- else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
- {
- // If NUM LED is turning off...
- PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
- }
- else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
- {
- // If SCROLL LK LED is turning on...
- PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
- }
- else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ if (!is_playing_notes())
{
- // If SCROLL LED is turning off...
- PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+ if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning off...
+ PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LED is turning off...
+ PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LED is turning off...
+ PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+ }
}
+
old_usb_led = usb_led;
}
@@ -511,7 +579,23 @@ void play_startup_tone()
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
- _delay_ms(1000);
+ _delay_ms(2000);
+ stop_all_notes();
+}
+
+void play_audio_on_tone(void)
+{
+ PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+}
+
+void play_music_on_tone(void)
+{
+ PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+}
+
+void play_music_scale(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
}
#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/keyboard/atomic/keymaps/pvc/makefile.mk b/keyboard/atomic/keymaps/pvc/makefile.mk
index eefa42855..f7798b09d 100644
--- a/keyboard/atomic/keymaps/pvc/makefile.mk
+++ b/keyboard/atomic/keymaps/pvc/makefile.mk
@@ -4,7 +4,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
diff --git a/keyboard/atreus/config.h b/keyboard/atreus/config.h
index ca0cd7e47..55d3b62b9 100644
--- a/keyboard/atreus/config.h
+++ b/keyboard/atreus/config.h
@@ -36,7 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Change this to how you wired your keyboard
// COLS: Left to right, ROWS: Top to bottom
#if defined(ATREUS_ASTAR)
- #define COLS (int []){ B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
+ #define COLS (int []){ D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
#define ROWS (int []){ D0, D1, D3, D2 }
#elif defined(ATREUS_TEENSY2)
#define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0}
diff --git a/keyboard/ergodox_ez/Makefile b/keyboard/ergodox_ez/Makefile
index 5dfcca2c8..3a07ec254 100644
--- a/keyboard/ergodox_ez/Makefile
+++ b/keyboard/ergodox_ez/Makefile
@@ -101,6 +101,22 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: ht
# MIDI_ENABLE = yes # MIDI controls
# UNICODE_ENABLE = yes # Unicode
+# If you want to have your own config_user.h, you can just put it in
+# your keymap directory. Anything you set there will take precedence
+# over the global config.h.
+ifneq ("$(wildcard keymaps/$(KEYMAP)/config_user.h)","")
+CONFIG_USER_H = keymaps/$(KEYMAP)/config_user.h
+endif
+
+ifdef KEYMAP
+
+ifeq ("$(wildcard keymaps/$(KEYMAP).c)","")
+ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
+ include keymaps/$(KEYMAP)/makefile.mk
+endif
+endif
+endif
+
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
diff --git a/keyboard/ergodox_ez/keymaps/adnw/k_o_y/k_o_y.hex b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/k_o_y.hex
new file mode 100644
index 000000000..95036fc44
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/k_o_y.hex
@@ -0,0 +1,1152 @@
+:100000000C9465020C94A9020C94A9020C94A90208
+:100010000C94A9020C94A9020C94A9020C94A902B4
+:100020000C94A9020C94A9020C946B0C0C943D0D39
+:100030000C94A9020C94A9020C94A9020C94A90294
+:100040000C94A9020C940F220C94A9020C94A902FE
+:100050000C94A9020C94B31B0C94A9020C94A90251
+:100060000C94A9020C94A9020C94A9020C94A90264
+:100070000C94A9020C94A9020C94A9020C94A90254
+:100080000C94A9020C94A9020C94A9020C94A90244
+:100090000C94A9020C94A9020C94A9020C94A90234
+:1000A0000C94A9020C94A9020C94A902A20DC40DEF
+:1000B000AF0EC40DAF0E060E290EAF0E7E0E910EC2
+:1000C0008B118B11CC11CC110E124A124A144A1406
+:1000D00062124A145913591324144A144A14381436
+:1000E0000000F0A12E004C002A00E1003581000044
+:1000F0001E000E000B001B7134004D001F00370066
+:1001000004001400E104280020001200080034005C
+:1001100050002C00210036000C002F004F004A0038
+:1001200022001D00180033000000657450000154C7
+:100130000000007F0000E3004F0001540000007742
+:100140000000E200230019000700050000002971EB
+:1001500024000A001700130052004B00250006007F
+:1001600015001A005100E50026000F0011001000D4
+:100170002F002B0027002D0016820D7130004E003D
+:100180002D001C000978E500C100000001000100FD
+:1001900001000100010000003A001E0220022202BC
+:1001A000010001003B001F022102230201000100A7
+:1001B0003C002F0226022F00010001003D0030020A
+:1001C00027023000010001003E00310235003502F7
+:1001D000000001000100010000000100000001001A
+:1001E0000100010000000100000001003F0052007A
+:1001F00051002402000001004000240021001E00E4
+:10020000010001004100250022001F00370001000D
+:1002100042002600230020002700010043002502A1
+:100220002E0231002E0001004400450001000100B3
+:1002300001000000010001000100010001000000B8
+:1002400001000100010001000100010001000100A6
+:10025000F2000100010001000100F000F1000100C6
+:10026000F400010001000100F3000100F5000100AD
+:100270000100010001000100000001000100010077
+:100280000000010000000100010001000000010069
+:100290000000010001000100010001000000010058
+:1002A0000100010001000100A9000100010001009E
+:1002B0000100AC00AA00B600010001000100AB0083
+:1002C000A80001000100010001000100010001007F
+:1002D00001000100AE00010001000000160345000E
+:1002E000720067006F0044006F0078002000450036
+:1002F0005A00000016034500720067006F004400BA
+:100300006F007800200045005A0000000403090433
+:1003100009026D00040100A0FA09040000010301B4
+:100320000100092111010001223F00070581030896
+:10033000000A090401000103010200092111010062
+:1003400001224D000705820308000A09040200018A
+:100350000300000009211101000122360007058376
+:100360000308000A09040300010300000009211129
+:100370000100012239000705840310000112011059
+:100380000100000008EDFE07130100010200010555
+:10039000010906A101050719E029E71500250195C6
+:1003A0000875018102050819012905950575019156
+:1003B000029501750391010507190029771500259C
+:1003C00001957875018102C005010980A1018502AE
+:1003D00016010026B7001A01002AB7007510950112
+:1003E0008100C0050C0901A1018503160100269CAE
+:1003F000021A01002A9C02751095018100C00501B6
+:100400000902A1010901A100050919012905150029
+:10041000250195057501810295017503810105018D
+:10042000093009311581257F950275088106093843
+:100430001581257F950175088106050C0A3802157E
+:1004400081257F950175088106C0C005010906A1B7
+:1004500001050719E029E7150025019508750181B7
+:100460000295017508810105081901290595057591
+:100470000191029501750391010507190029FF15E6
+:100480000025FF950675088100C0000000000000EF
+:100490000000000000010204060A0F17202C3A4A4F
+:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
+:1004B000B39D87715D4A3A2C20170F0A060402018A
+:1004C0000000000000000000000011241FBECFEF5C
+:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A
+:1004E0009091EF01A091F001B091F1018730904B14
+:1004F000A740B04BB9F41092EE011092EF011092A8
+:10050000F0011092F10114BE84B7877F84BF88E1A7
+:100510000FB6F89480936000109260000FBEE0E088
+:10052000FFE3099511E0A0E0B1E0ECEAF7E402C0D6
+:1005300005900D92A433B107D9F721E0A4E3B1E00F
+:1005400001C01D92AE3EB207E1F70E94B1090C94C2
+:10055000D4230C94000061110BC0FC01828188231C
+:1005600021F085EE0E94131003C085EE0E94DB107F
+:1005700080E090E0089508956091B1017091B2011A
+:100580008091B3019091B4010E94DC1A56985E9854
+:1005900025982D9826982E9827982F98813019F015
+:1005A000823021F00895259A2D9A0895269A2E9A40
+:1005B00008950C94BC0256985E9825982D9826981C
+:1005C0002E9827982F988FEF90E090938900809332
+:1005D000880090938B0080938A0090938D00809385
+:1005E0008C00259A2D9A2FEF80E792E021508040D1
+:1005F0009040E1F700C00000269A2E9A2FEF80E786
+:1006000092E0215080409040E1F700C00000279A1E
+:100610002F9A2FEF80E792E0215080409040E1F741
+:1006200000C0000025982D982FEF80E792E0215020
+:1006300080409040E1F700C0000026982E982FEFF0
+:1006400080E792E0215080409040E1F700C0000038
+:1006500027982F9856985E9825982D9826982E982A
+:1006600027982F98089589EA8093800089E08093E5
+:10067000810024982C983F988AB18F748AB96E981B
+:10068000479A8BB1806B8BB9769A0E94DB020C94EF
+:10069000BB0280E2809300018091340181110EC081
+:1006A0000E94980381E0809334012FEF83ED90E363
+:1006B000215080409040E1F700C0000080E40E949B
+:1006C0009E038093000181112EC00E94C803809375
+:1006D0000001811128C00E94C8038093000181118C
+:1006E00022C08FE30E94C8038093000181111BC0C8
+:1006F0000E94C00380E40E949E0380930001811148
+:1007000012C08CE00E94C8038093000181110BC0CD
+:100710000E94C80380930001811105C08FE30E94ED
+:10072000C803809300010E94C003809100010895D6
+:100730001092B9008AE08093B800089594EA9093EB
+:10074000BC009091BC0097FFFCCF9091B900987FBE
+:10075000983021F0903111F081E008958093BB0032
+:1007600084E88093BC008091BC0087FFFCCF80911F
+:10077000B900887F883111F0803471F780E00895E6
+:1007800084E98093BC008091BC0084FDFCCF089577
+:100790008093BB0084E88093BC008091BC0087FFFD
+:1007A000FCCF9091B900987F81E0983209F480E005
+:1007B000089584E88093BC008091BC0087FFFCCF43
+:1007C0008091BB00089580910001811115C080E4E3
+:1007D0000E949E038093000181110CC082E10E945F
+:1007E000C80380930001811105C08FEF0E94C803E8
+:1007F000809300010E94C00384B1807F84B985B1D9
+:10080000807F85B98AB1837F8AB98BB1837F8BB9A9
+:100810003E98469808950E944903809300010E94E3
+:10082000E30380B38C7080BB81B3836F81BBE4E44E
+:10083000F1E0A6E3B1E011921D9281E0E235F80704
+:10084000D1F70C943303BF92CF92DF92EF92FF92D5
+:100850000F931F93CF93DF9380910001882379F04A
+:10086000809135018F5F80933501811108C00E940E
+:10087000490380930001811102C00E94DB0206E35C
+:1008800011E0C0E0D0E0DD24D39482E0C82EEE2455
+:10089000E394F12CC73000F580910001811162C012
+:1008A00080E40E949E0380930001811112C082E1C6
+:1008B0000E94C8038093000181110BC0C7010C2E58
+:1008C00001C0880F0A94EAF780950E94C8038093BC
+:1008D00000010E94C00346C0CA30A1F028F4C8300D
+:1008E00059F0C93061F005C0CC3089F070F0CD30DE
+:1008F00089F0209A289810C0219A29980DC0229A30
+:100900002A980AC0239A2B9807C0529A01C0539A7A
+:100910005B9802C03E9A4698E0EAEA95F1F78FB1FB
+:1009200079995AC092E081708D25892B7C9B02C0F9
+:1009300090E001C094E0892B7D9B02C090E001C053
+:1009400098E0892B7E9B02C090E001C090E1892B4A
+:100950009FB19095991F9927991F9295990F907E15
+:10096000892B0FC08091000181114BC080E40E944F
+:100970009E0380930001882389F1B12C0E94C0035B
+:100980008B2DF8019081981719F08083C092010196
+:100990000E94E30321960F5F1F4FCE30D10509F06F
+:1009A00079CF80910101882371F1815080930101F9
+:1009B000882339F08FE99FE00197F1F700C000002C
+:1009C00022C0A4E4B1E0E6E3F1E081918D9391E0EF
+:1009D000E434F907D1F717C090E0A5CF83E10E9476
+:1009E000C803809300018111C8CF81E40E949E0357
+:1009F000809300018111C1CF0E94D903B82EB09419
+:100A0000BDCF80E0BECF0E94D90281E0DF91CF91BF
+:100A10001F910F91FF90EF90DF90CF90BF900895BE
+:100A2000E82FF0E0EC5BFE4F808108950895089573
+:100A300096E0799FF001112494E5899FE00DF11D66
+:100A40001124E60FF11DEE0FFF1FEC51FF4F8591B2
+:100A500094910895880F991F805A9040FC018591C8
+:100A600094910895880F991F80529F4FFC018591A2
+:100A7000949108950F931F93CF93DF93EC01811509
+:100A800020E3920730F5811530E2930708F0B1C0FA
+:100A90008B3B910588F4883A910508F058C0853A57
+:100AA000910508F049C08430910508F043C08130B9
+:100AB000910509F4B2C1AEC18F3F910509F0D0F59F
+:100AC000803F910508F092C0805E9109089790F1EF
+:100AD000A1C1C11581E5D807A8F4C23090E5D907B6
+:100AE00008F09FC0C11520E5D20709F486C008F0C0
+:100AF00092C0C11580E4D80708F08CC18E0111277F
+:100B0000106CCCC1C11590E8D90758F4C11520E785
+:100B1000D20708F07BC1C11530E6D30708F423C122
+:100B200079C1C11580E9D80708F074C18E011F7022
+:100B3000106AB4C18E01B2C1853A910509F470C141
+:100B4000863A910509F46FC103E810E4A7C1883A19
+:100B5000910509F46BC1893A910509F46AC18A3A91
+:100B6000910509F469C18B3A910509F468C18C3A81
+:100B7000910509F467C18D3A910509F466C1803B7E
+:100B8000910509F465C18E3A910509F464C18F3A63
+:100B9000910509F463C1813B910509F462C1823B6F
+:100BA000910509F461C1833B910509F460C1843B5F
+:100BB000910509F45FC1853B910509F45EC1863B4F
+:100BC000910509F45DC1873B910509F45CC1883B3F
+:100BD000910509F45BC1893B910509F45AC18A3B2F
+:100BE000910509F059C10AE216E458C18C0110655B
+:100BF00055C19F700E94320552C10E946D149FEF33
+:100C000024E33CE0915020403040E1F700C0000078
+:100C10000E94D81B43C18091CD0181608093CD019A
+:100C20003DC10E94801D811102C00E94661D0E946C
+:100C30009D1D90E09093EE018093ED01C23080E520
+:100C4000D80721F48091ED01816086C0C43090E521
+:100C5000D90721F48091ED0182607EC0C63020E585
+:100C6000D20721F48091ED01846076C0C83030E570
+:100C7000D30719F48091ED0127C0CA3080E5D80769
+:100C800021F48091ED01806167C0CC3090E5D907F7
+:100C900021F48091ED0180625FC0CE3020E5D20763
+:100CA00021F48091ED01806457C0C03130E5D30755
+:100CB00021F48091ED0180684FC0C23180E5D807F2
+:100CC00029F48091ED018460886046C0C33090E5CE
+:100CD000D90721F48091ED018E7F3EC0C53020E51B
+:100CE000D20721F48091ED018D7F36C0C73030E509
+:100CF000D30721F48091ED018B7F2EC0C93080E5B0
+:100D0000D80719F48091ED0126C0CB3090E5D907C2
+:100D100021F48091ED018F7E1FC0CD3020E5D207F8
+:100D200021F48091ED018F7D17C0CF3030E5D307DE
+:100D300021F48091ED018F7B0FC0C13180E5D80790
+:100D400021F48091ED018F7707C0C331D04531F494
+:100D50008091ED018B7F877F8093ED018091ED0184
+:100D60000E94A11D9BC08D2F99278F7099278130DC
+:100D70009105E9F48E01037011279C0102C0220F36
+:100D8000331F0A95E2F789011C68CE0164E0880FE1
+:100D9000991F6A95E1F788279370082B192B73E048
+:100DA000CC0FDD1F7A95E1F7C076DD272CC08230AD
+:100DB000910529F41C2F0027016F106A6FC0833042
+:100DC000910561F4CE018370992701E010E002C023
+:100DD000000F111F8A95E2F71C680EC0049709F0F6
+:100DE0005DC0CE018370992701E010E002C0000FC2
+:100DF000111F8A95E2F71A6843E0CC0FDD1F4A9570
+:100E0000E1F7C07ED7700C2B1D2B48C08E011F70E0
+:100E1000106244C000E010E041C001E010E03EC0BC
+:100E200001E810E43BC002E810E438C002EE14E42C
+:100E300035C009EE14E432C00AEE14E42FC005EB0D
+:100E400014E42CC006EB14E429C007EB14E426C01C
+:100E50000CEC14E423C00DEC14E420C003E815E40A
+:100E60001DC00AE815E41AC002E915E417C004E938
+:100E700015E414C001E216E411C003E216E40EC04A
+:100E800004E216E40BC005E216E408C006E216E42C
+:100E900005C007E216E402C000E014E4C801DF91D7
+:100EA000CF911F910F91089596E0799FF001112441
+:100EB00094E5899FE00DF11D1124E60FF11DEE0F61
+:100EC000FF1FEC51FF4F85919491803E9105E0F416
+:100ED000803C910558F58133910509F46FC048F4C1
+:100EE0008932910509F463C08A32910509F46DC015
+:100EF00072C089339105E9F082389105D1F08533CC
+:100F0000910509F44DC067C0833E910581F138F425
+:100F1000803E9105B9F0823E9105D9F05CC0863ED5
+:100F2000910561F1873E9105A1F155C00E942A0506
+:100F300008952091ED0120FD02C021FF4CC080EEFC
+:100F400090E049C08091ED0180FFF9CF89E390E006
+:100F500042C08091ED0182FF0EC08091ED0184FFBF
+:100F600003C080E090E037C083EE90E034C0809111
+:100F7000ED0182FFF2CF82EE90E02DC08091ED0175
+:100F800083FF0BC08091ED0184FDEBCF87EE90E0F5
+:100F900022C08091ED0183FFF5CF86EE90E01BC06B
+:100FA0008091ED0185FF07C089E290E014C0809137
+:100FB000ED0185FFF9CF85E390E00DC08091ED0153
+:100FC00086FF07C08AE290E006C08091ED0186FFAF
+:100FD000F9CF81E390E00E943A05089508950C94BA
+:100FE000EE07809162010895CF93DF9300D01F92A6
+:100FF000CDB7DEB72091E401243019F523E0298331
+:101000009B838A832093E9008FEF9091E8008150C1
+:1010100095FD06C095ED9A95F1F700008111F5CF89
+:101020008091E80085FF0DC040E050E063E070E093
+:10103000CE0101960E945E0A8091E8008E7780932F
+:10104000E8000F900F900F90DF91CF910895CF930C
+:10105000DF9300D01F92CDB7DEB72091E40124309A
+:1010600021F522E029839B838A8383E08093E90032
+:101070008FEF9091E800815095FD06C095ED9A950F
+:10108000F1F700008111F5CF8091E80085FF0DC0D8
+:1010900040E050E063E070E0CE0101960E945E0AFD
+:1010A0008091E8008E778093E8000F900F900F906A
+:1010B000DF91CF9108952091E4012430F1F422E0F2
+:1010C0002093E9002FEF3091E800215035FD06C054
+:1010D00035ED3A95F1F700002111F5CF2091E800A8
+:1010E00025FF0BC040E050E065E070E00E945E0A22
+:1010F0008091E8008E778093E8000895CF93DF9386
+:10110000EC018091E401843009F046C090910C011B
+:101110009923D9F090910D019923B9F08093E900BA
+:101120008FEF9091E800815095FD06C095E19A956A
+:10113000F1F700008111F5CF8091E80085FF2CC008
+:1011400040E050E060E170E017C081E08093E9008A
+:101150008FEF9091E800815095FD06C095ED9A952E
+:10116000F1F700008111F5CF8091E80085FF14C0F0
+:1011700040E050E068E070E0CE010E945E0A80919D
+:10118000E8008E778093E80080E1FE01A2E5B1E0FF
+:1011900001900D928A95E1F7DF91CF9108958091AA
+:1011A000E301811109C00E94F00B0E944D0C809157
+:1011B000E20084608093E20008951092E3010895B4
+:1011C00008950C94FC210E946F1B0E9402220E9431
+:1011D000EA0E0C94EF0742E061EC81E00E946A0B9A
+:1011E00042E061EC82E00E946A0B42E061EC83E045
+:1011F0000E946A0B42E161EC84E00C946A0B8091DE
+:10120000E601833009F455C030F4813071F082304A
+:1012100009F48EC008958A3009F47AC08B3009F43D
+:1012200060C0893009F09CC020C08091E501813AFE
+:1012300009F096C08091E800877F8093E800809154
+:10124000E9019091EA01892B21F060E080E090E0D3
+:1012500003C060E182E591E070E00E94A70A8091FE
+:10126000E8008B778093E80008958091E501813252
+:1012700009F076C08091E9019091EA01009719F098
+:10128000039709F06DC08091E800877F8093E800A4
+:101290008091E80082FD05C08091E4018111F8CFC2
+:1012A0005FC08091F100809362018091E8008B77AC
+:1012B00053C08091E501813A09F052C08091E90163
+:1012C0009091EA01892B09F04BC08091E800877F5B
+:1012D0008093E8008091E80080FFFCCF80910C01B2
+:1012E00036C08091E5018132D9F58091E901909174
+:1012F000EA01892BA9F58091E800877F8093E800B7
+:101300000E949F0B8091E70180930C010C946D1457
+:101310008091E501813221F58091E800877F8093FB
+:10132000E8000E949F0B8091E8018093630108957B
+:101330008091E501813AA1F48091E800877F809354
+:10134000E8008091E80080FFFCCF809163018093EA
+:10135000F1008091E8008E778093E8000C949F0B59
+:10136000089584B7877F84BF88E10FB6F89480938F
+:101370006000109260000FBE90E080E80FB6F89415
+:1013800080936100909361000FBE0E94390F0E940C
+:10139000F00B0E944D0C8091E20084608093E2008B
+:1013A00078940E94C80E0E943B0F82E091E00E9458
+:1013B000E50E0E94EA218091E401853069F40E94E3
+:1013C0002F1B8091E2018823B1F30E945A1B8823CE
+:1013D00091F30E94480AEFCF0E94410FECCF292FD2
+:1013E000332723303105A9F06CF42130310509F49D
+:1013F00042C02230310509F043C08DE690E020E183
+:1014000033E042C021323105C9F02232310519F1F1
+:1014100037C099278130910541F08230910541F024
+:10142000892B71F5ECE0F3E005C0E4EFF2E002C0D7
+:10143000ECEDF2E0849190E09F0126C0643000F56D
+:10144000E62FF0E0EE0FFF1FEE5DFE4F20813181B1
+:1014500089E090E019C0643098F4E62FF0E0DF01F5
+:10146000AA0FBB1FA65EBE4F2D913C91EA5EFE4FB8
+:10147000808190E009C082E190E02DE733E004C074
+:1014800080E090E020E030E0FA013183208308958D
+:1014900080E189BD82E189BD09B400FEFDCF809164
+:1014A000D8008F7D8093D8008091E0008260809387
+:1014B000E0008091E00081FDFCCF0895CF92DF92A3
+:1014C000EF92FF920F931F93CF93DF937C018B01D9
+:1014D000EA010E94C00B811131C0209731F0888150
+:1014E0009981081B190BE80EF91EC12CD12C01158E
+:1014F000110519F18091E80085FD14C08091E80084
+:101500008E778093E800209741F0888199818C0D37
+:101510009D1D9983888385E011C00E94C00B88239C
+:1015200031F30CC0F70181917F018093F1000150EC
+:101530001109FFEFCF1ADF0ADACF80E0DF91CF91F8
+:101540001F910F91FF90EF90DF90CF900895209121
+:10155000EB013091EC012617370748F06115710552
+:1015600039F42091E8002E772093E80001C0B901FA
+:10157000FC0120E061157105B9F18091E401882337
+:1015800009F440C0853009F43FC08091E80083FD34
+:101590003DC08091E80082FF06C08091E80082FF94
+:1015A00026C080E008958091E80080FFE3CF20917D
+:1015B000F3008091F20090E0922B6115710551F0DB
+:1015C0008830910538F421912093F1006150710920
+:1015D0000196F3CF21E0089709F020E08091E80020
+:1015E0008E778093E800C6CF2111C7CFD6CF8091E8
+:1015F000E401882339F0853039F08091E80083FFD9
+:10160000CCCF04C082E0089583E0089581E008957E
+:101610002091EB013091EC012617370748F0611556
+:10162000710539F42091E8002E772093E80001C07D
+:10163000B901FC0120E061157105C1F18091E4015F
+:10164000882309F441C0853009F440C08091E80046
+:1016500083FD3EC08091E80082FF06C08091E800D3
+:1016600082FF27C080E008958091E80080FFE3CFEB
+:101670002091F3008091F20090E0922B61157105AA
+:1016800059F08830910540F424912093F10031966F
+:10169000615071090196F2CF21E0089709F020E02E
+:1016A0008091E8008E778093E800C5CF2111C6CFE6
+:1016B000D5CF8091E401882339F0853039F08091CD
+:1016C000E80083FFCBCF04C082E0089583E0089553
+:1016D00081E00895982F973058F59093E900981776
+:1016E00039F07091EC002091ED005091F00003C0B2
+:1016F000242F762F50E021FF19C03091EB003E7F60
+:101700003093EB003091ED003D7F3093ED00309150
+:10171000EB0031603093EB007093EC002093ED0010
+:101720005093F0002091EE0027FF07C09F5FD3CFBA
+:101730008F708093E90081E0089580E008958091A2
+:10174000E50187FD05C08091E80080FF0EC012C052
+:101750008091E80082FD05C08091E4018111F8CFFD
+:1017600008958091E8008B7708C08091E401811191
+:10177000EACF08958091E8008E778093E80008957D
+:101780008091E4009091E50045E62091EC0020FF77
+:1017900021C02091E80020FD21C02091E4012223F6
+:1017A00089F0253089F02091EB0025FD0FC02091B4
+:1017B000E4003091E5002817390739F3415041F032
+:1017C000C901E3CF82E0089583E0089581E00895A0
+:1017D00084E008952091E80022FFDFCF80E00895A3
+:1017E0000E945E0C0E94660CE0EEF0E08081816059
+:1017F0008083E8EDF0E080818F77808319BCA7EDCE
+:10180000B0E08C918E7F8C9380818F7E808310924C
+:10181000E30108950F931F93CF93DF930E945E0C13
+:101820000E94660CC8EDD0E088818F77888388811C
+:101830008068888388818F7D888319BC1092E40139
+:101840001092E0011092E2011092E10100EE10E02E
+:10185000F80180818B7F808388818160888342E06A
+:1018600060E080E00E946A0BE1EEF0E080818E7F14
+:101870008083E2EEF0E080818160808380818860F7
+:101880008083F80180818E7F808388818061888356
+:10189000DF91CF911F910F910895E8EDF0E08081E5
+:1018A0008F7E8083E7EDF0E080818160808384E03B
+:1018B00082BF81E08093E3010C940A0CE8EDF0E034
+:1018C00080818E7F80831092E20008951092DA006A
+:1018D0001092E10008951F920F920FB60F921124FB
+:1018E0002F933F934F935F936F937F938F939F9328
+:1018F000AF93BF93EF93FF938091E10082FF0BC002
+:101900008091E20082FF07C08091E1008B7F80938D
+:10191000E1000E94C70E8091DA0080FF1FC0809115
+:10192000D80080FF1BC08091DA008E7F8093DA00A0
+:101930008091D90080FF0DC080E189BD82E189BD21
+:1019400009B400FEFDCF81E08093E4010E94CF083E
+:1019500005C019BC1092E4010E94DD088091E100ED
+:1019600080FF19C08091E20080FF15C08091E200E5
+:101970008E7F8093E2008091E20080618093E2009C
+:101980008091D80080628093D80019BC85E0809354
+:10199000E4010E94E1088091E10084FF30C0809161
+:1019A000E20084FF2CC080E189BD82E189BD09B4D9
+:1019B00000FEFDCF8091D8008F7D8093D80080916C
+:1019C000E1008F7E8093E1008091E2008F7E809322
+:1019D000E2008091E20081608093E2008091E0016A
+:1019E000882311F084E007C08091E30087FF02C0E4
+:1019F00083E001C081E08093E4010E94E3088091CC
+:101A0000E10083FF29C08091E20083FF25C080911F
+:101A1000E100877F8093E10082E08093E4011092EF
+:101A2000E0018091E1008E7F8093E1008091E200EF
+:101A30008E7F8093E2008091E20080618093E200DB
+:101A400042E060E080E00E946A0B8091F0008860D4
+:101A50008093F0000E94E008FF91EF91BF91AF9159
+:101A60009F918F917F916F915F914F913F912F91B6
+:101A70000F900FBE0F901F9018951F920F920FB6E8
+:101A80000F9211242F933F934F935F936F937F9304
+:101A90008F939F93AF93BF93CF93EF93FF93C09197
+:101AA000E900CF708091EC001092E9008091F00085
+:101AB000877F8093F00078940E94790D1092E9005E
+:101AC0008091F00088608093F000C093E900FF915E
+:101AD000EF91CF91BF91AF919F918F917F916F9136
+:101AE0005F914F913F912F910F900FBE0F901F90DC
+:101AF00018951F93CF93DF93CDB7DEB7AA970FB694
+:101B0000F894DEBF0FBECDBFE5EEF1E08091F100AD
+:101B1000819321E0ED3EF207C9F70E94FF08809112
+:101B2000E80083FF1CC12091E5013091E601832F7D
+:101B300090E08A30910508F012C1FC01EA5AFF4F8B
+:101B40000C948423203881F0223809F008C1809158
+:101B5000E9018F708093E9008091EB0085FB882775
+:101B600080F91092E90006C08091E1019091E201B4
+:101B7000911182609091E800977F9093E8008093A4
+:101B8000F1001092F100C5C0822F8D7F09F0E7C0EF
+:101B9000222319F0223061F0E2C08091E701813008
+:101BA00009F0DDC0333009F080E08093E20128C005
+:101BB0008091E701811124C02091E9012F7009F47F
+:101BC000CEC02093E9008091EB0080FF19C0809186
+:101BD000EB00333011F4806211C080618093EB0020
+:101BE00081E090E0022E01C0880F0A94EAF780930A
+:101BF000EA001092EA008091EB0088608093EB008D
+:101C00001092E9008091E800877F86C02111A7C06B
+:101C10001091E7011F778091E3008078812B8093FA
+:101C2000E3008091E800877F8093E8000E949F0B8B
+:101C30008091E80080FFFCCF8091E3008068809372
+:101C4000E300112311F083E001C082E08093E401FE
+:101C500086C02058223008F082C08091E701909120
+:101C6000E8018C3D23E0920779F583E08A838AE2DC
+:101C700089834FB7F894DE01139620E03EE051E2ED
+:101C8000E32FF0E050935700E49120FF03C0E2956A
+:101C9000EF703F5FEF708E2F90E0EA3010F0C79644
+:101CA00001C0C0968D939D932F5F243149F74FBF9C
+:101CB0008091E800877F8093E8006AE270E0CE01BF
+:101CC00001960E94A70A14C0AE014F5F5F4F60915A
+:101CD000E9010E94EF09009709F441C02091E80052
+:101CE000277F2093E800BC0189819A810E94080B1C
+:101CF0008091E8008B778093E80031C0203879F537
+:101D00008091E800877F8093E8008091E0018093D4
+:101D1000F1008091E8008E778093E8000E949F0B8D
+:101D20001EC021111CC09091E7019230C0F4809137
+:101D3000E800877F8093E8009093E0010E949F0B6A
+:101D40008091E001811104C08091E30087FF02C00F
+:101D500084E001C081E08093E4010E94EB0880915F
+:101D6000E80083FF0AC08091E800877F8093E80045
+:101D70008091EB0080628093EB00AA960FB6F894F6
+:101D8000DEBF0FBECDBFDF91CF911F9108950895A3
+:101D9000CF938091E4018823B1F08091E9008F70A6
+:101DA0009091EC0090FF02C090E801C090E0C92F34
+:101DB000C82B1092E9008091E80083FD0E94790D04
+:101DC000CF70C093E900CF910895909369018093FB
+:101DD00068010895E0916801F0916901309721F060
+:101DE0000190F081E02D099480E00895E091680170
+:101DF000F0916901309721F00280F381E02D099480
+:101E00000895E0916801F0916901309721F0048014
+:101E1000F581E02D099408952091660130916701C4
+:101E20008217930771F09093670180936601E091A8
+:101E30006801F0916901309721F00680F781E02D6B
+:101E400009940895209164013091650182179307E8
+:101E500071F09093650180936401E0916801F091C5
+:101E60006901309721F00084F185E02D09940895EF
+:101E700008950C94380F0E94751B0E940B040C945B
+:101E80003B1CCF92DF92EF92FF920F931F93CF9361
+:101E9000DF93CDB7DEB72B970FB6F894DEBF0FBE3A
+:101EA000CDBF0E9423043BE6E32E31E0F32E00E099
+:101EB00010E0C02E802F0E941005F701D1907F0105
+:101EC000D826B1F40F5F1F4F0E30110591F78FEF39
+:101ED00089838A831B820E947E1B8160782F9D8369
+:101EE0008C8349815A816B818D810E94E40F41C0AE
+:101EF0009091CD0191FF04C08B870E9416058B85C0
+:101F000020E030E04D2D50E0922FBA01022E02C0A9
+:101F1000759567950A94E2F760FF25C02E83CF82FE
+:101F2000EE24E394F12C02C0EE0CFF1C9A95E2F72C
+:101F300090E08E219F2121E0892B09F420E0288761
+:101F40000E947E1B8160782F9A8789874E815F81EE
+:101F500068858A850E94E40FF801E559FE4F80816B
+:101F60008E25808306C02F5F3F4F2630310561F6F6
+:101F7000A9CF0E941F1F10916A010E94EA0E181734
+:101F8000A1F00E94EA0E80936A012B960FB6F89496
+:101F9000DEBF0FBECDBFDF91CF911F910F91FF909C
+:101FA000EF90DF90CF900C94EF072B960FB6F8943C
+:101FB000DEBF0FBECDBFDF91CF911F910F91FF907C
+:101FC000EF90DF90CF900895CF93DF93CDB7DEB73A
+:101FD0002B970FB6F894DEBF0FBECDBF4F83588747
+:101FE00069877A878B87DE01119686E0FD01119261
+:101FF0008A95E9F785E0FE01379601900D928A9562
+:10200000E1F749815A816B817C818D819E810E949B
+:1020100039172B960FB6F894DEBF0FBECDBFDF91F8
+:10202000CF9108950895CF93C82F882309F4C1C094
+:10203000823859F40E94EA0E81FDBBC089E30E94F8
+:10204000E3190E94AD1A89E30CC0833879F40E9429
+:10205000EA0E80FDAEC083E50E94E3190E94AD1A2E
+:1020600083E50E94231ACF910C94AD1A843859F459
+:102070000E94EA0E82FD9DC087E40E94E3190E943F
+:10208000AD1A87E4EECF8CEF8C0F813A48F48C2F99
+:102090000E94522181118DC08C2F0E94E319E3CF41
+:1020A00080E28C0F883048F4C77081E001C0880F4F
+:1020B000CA95EAF70E94641AD6CF8BE58C0F83305D
+:1020C00078F4C53A29F0C63A31F482E890E005C0C8
+:1020D00081E890E002C083E890E0CF910C940C0F6F
+:1020E00088E58C0F833108F064C0C83A39F1C93AE9
+:1020F00041F1CA3A49F1CB3A51F1CC3A59F1CD3AD2
+:1021000061F1C03B69F1CE3A71F1CF3A79F1C13B4F
+:1021100081F1C23B89F1C33B91F1C43B99F1C53BCD
+:10212000A1F1C63BA9F1C73BB1F1C83BB9F1C93B2D
+:10213000C1F1CA3BC9F58AE292E038C082EE90E074
+:1021400035C089EE90E032C08AEE90E02FC085EB7A
+:1021500090E02CC086EB90E029C087EB90E026C091
+:102160008CEC90E023C08DEC90E020C083E891E0FF
+:102170001DC08AE891E01AC082E991E017C084E9A5
+:1021800091E014C081E292E011C083E292E00EC0BF
+:1021900084E292E00BC085E292E008C086E292E021
+:1021A00005C087E292E002C080E090E0CF910C94FD
+:1021B000220FCF910895882309F44BC0823859F437
+:1021C0000E94EA0E81FF45C089E30E94E3190E9444
+:1021D000AD1A89E30CC0833871F40E94EA0E80FFC7
+:1021E00038C083E50E94E3190E94AD1A83E50E947E
+:1021F000231A0C94AD1A843859F40E94EA0E82FF17
+:1022000028C087E40E94E3190E94AD1A87E4EFCF4B
+:102210009CEF980F913A58F390E2980F983050F451
+:10222000877091E001C0990F8A95EAF7892F0E9483
+:102230006A1ADFCF9BE5980F933020F480E090E09E
+:102240000C940C0F885A833120F480E090E00C94B9
+:10225000220F0895882321F00E94641A0C94AD1A6D
+:102260000895882321F00E946A1A0C94AD1A0895EB
+:10227000CF92DF92EF92FF920F931F93CF93DF9352
+:10228000CDB7DEB728970FB6F894DEBF0FBECDBF2F
+:102290008C0185E0F801DE01119601900D928A957E
+:1022A000E1F7F801D080E180F280558152955F70AE
+:1022B00023813481232B39F0FFEFEF1206C081E038
+:1022C000DF1203C003C081E001C080E080FDE2C2F4
+:1022D000C8015F830E941210D982EA8269817A81E3
+:1022E0008F2D0E94DF199E8388870E9493190E9478
+:1022F00066184E815F816885FF2029F00E94811A4F
+:1023000068855F814E81E42FE295EF70F0E0E05A3E
+:10231000FF4F0C948423842F807F142F1F708823F9
+:1023200011F01295107FFF20B1F0112309F467C25C
+:1023300080E2860F883028F4812F68870E94641A13
+:1023400004C0812F68870E94741A688568870E947C
+:10235000AD1A688554C2862F68870E94DB10688595
+:10236000112309F497C2605E812F683018F40E942F
+:102370006A1A02C00E947A1A28960FB6F894DEBF35
+:102380000FBECDBFDF91CF911F910F91FF90EF90C6
+:10239000DF90CF900C94AD1A242F207F842F8F7064
+:1023A000203211F08295807F662319F0613019F197
+:1023B0002BC0FF20B1F0552309F493C1513009F02F
+:1023C00090C128960FB6F894DEBF0FBECDBFDF9147
+:1023D000CF911F910F91FF90EF90DF90CF900C94D1
+:1023E000941A552319F0513009F454C28E830E9477
+:1023F000971A8E8189C1FF2021F0523008F04AC21D
+:1024000070C1511147C280C1FF2021F0552309F44A
+:1024100068C1F5C1552309F477C105C2242F26955B
+:102420002695237030E02115310521F0213031054A
+:10243000C9F030C2FF2021F0862F942F937002C084
+:1024400080E090E028960FB6F894DEBF0FBECDBFB7
+:10245000DF91CF911F910F91FF90EF90DF90CF9080
+:102460000C940C0FFF2021F0862F942F937002C044
+:1024700080E090E028960FB6F894DEBF0FBECDBF87
+:10248000DF91CF911F910F91FF90EF90DF90CF9050
+:102490000C94220F862FFF2019F00E94271E02C0E5
+:1024A0000E948F1E28960FB6F894DEBF0FBECDBFD8
+:1024B000DF91CF911F910F91FF90EF90DF90CF9020
+:1024C0000C94141F842F837009F076C0F110E2C1C0
+:1024D000262F229526952770220F220F862F8F7088
+:1024E000C82ED12CE12CF12C022E04C0CC0CDD1C0A
+:1024F000EE1CFF1C0A94D2F764FF10C06FE070E07E
+:1025000080E090E004C0660F771F881F991F2A950E
+:10251000D2F7609570958095909503C060E070E06B
+:10252000CB01242F269526952370422F50E0423070
+:102530005105D1F04330510559F16C297D298E297F
+:102540009F294130510541F128960FB6F894DEBF1E
+:102550000FBECDBFDF91CF911F910F91FF90EF90F4
+:10256000DF90CF900C948B186C297D298E299F29A0
+:1025700028960FB6F894DEBF0FBECDBFDF91CF9186
+:102580001F910F91FF90EF90DF90CF900C94A518C2
+:102590000E948B18C701B60128960FB6F894DEBFCB
+:1025A0000FBECDBFDF91CF911F910F91FF90EF90A4
+:1025B000DF90CF900C947118FF2019F0842F817058
+:1025C00001C08695882309F465C1262F229526959A
+:1025D0002770220F220F862F8F70C82ED12CE12C4E
+:1025E000F12C022E04C0CC0CDD1CEE1CFF1C0A9446
+:1025F000D2F764FF10C06FE070E080E090E004C0AC
+:10260000660F771F881F991F2A95D2F760957095DE
+:102610008095909503C060E070E0CB01242F269553
+:1026200026952370422F50E042305105D1F04330BF
+:10263000510559F16C297D298E299F294130510579
+:1026400041F128960FB6F894DEBF0FBECDBFDF91E3
+:10265000CF911F910F91FF90EF90DF90CF900C944E
+:102660005F196C297D298E299F2928960FB6F89429
+:10267000DEBF0FBECDBFDF91CF911F910F91FF90B5
+:10268000EF90DF90CF900C9479190E945F19C701E9
+:10269000B60128960FB6F894DEBF0FBECDBFDF910E
+:1026A000CF911F910F91FF90EF90DF90CF900C94FE
+:1026B0004519603FC9F118F4603E50F49BC0623F79
+:1026C00009F460C008F44AC0633F09F46FC092C0C7
+:1026D000162F1F70842F8F71FF2099F00E94DE1833
+:1026E000812F28960FB6F894DEBF0FBECDBFDF91C5
+:1026F000CF911F910F91FF90EF90DF90CF900C94AE
+:102700002A110E94FF18812F28960FB6F894DEBF79
+:102710000FBECDBFDF91CF911F910F91FF90EF9032
+:10272000DF90CF900C943111FF20A1F05111B2C075
+:10273000842F8F7128960FB6F894DEBF0FBECDBFE1
+:10274000DF91CF911F910F91FF90EF90DF90CF908D
+:102750000C942419523008F09DC0EACFFF20A1F05C
+:10276000842F8F7128960FB6F894DEBF0FBECDBFB1
+:10277000DF91CF911F910F91FF90EF90DF90CF905D
+:102780000C94DE18FF2061F3842F8F7128960FB60A
+:10279000F894DEBF0FBECDBFDF91CF911F910F9197
+:1027A000FF90EF90DF90CF900C94FF18FF2091F0F6
+:1027B000842F8F7128960FB6F894DEBF0FBECDBF61
+:1027C000DF91CF911F910F91FF90EF90DF90CF900D
+:1027D0000C94C91828960FB6F894DEBF0FBECDBF73
+:1027E000DF91CF911F910F91FF90EF90DF90CF90ED
+:1027F0000C94BF18FF20A1F0552309F4B1CF862F08
+:1028000028960FB6F894DEBF0FBECDBFDF91CF91F3
+:102810001F910F91FF90EF90DF90CF900C941310C9
+:10282000552309F4B1CF862F28960FB6F894DEBF52
+:102830000FBECDBFDF91CF911F910F91FF90EF9011
+:10284000DF90CF900C94DB104F70C8010E94AB0258
+:1028500028960FB6F894DEBF0FBECDBFDF91CF91A3
+:102860001F910F91FF90EF90DF90CF900C94E6179F
+:102870004F70C80128960FB6F894DEBF0FBECDBFCB
+:10288000DF91CF911F910F91FF90EF90DF90CF904C
+:102890000C94170528960FB6F894DEBF0FBECDBF77
+:1028A000DF91CF911F910F91FF90EF90DF90CF902C
+:1028B00008950E94811A0E94911A0E94561A0E943D
+:1028C000AD1A0E94C01F0E94141F80E090E00E9479
+:1028D0000C0F80E090E00C94220F0E94711A0C946F
+:1028E00059140E94D419292F22952F7030E02C30D2
+:1028F00031054CF42A3031056CF422503109223074
+:10290000310590F407C02C30310551F02F303105DE
+:1029100039F00AC0803E10F0803F31F481E0089524
+:1029200093FB882780F9089580E00895CF93DF9383
+:1029300000D000D01F92CDB7DEB70F900F900F9050
+:102940000F900F90DF91CF910895CF93DF9300D038
+:1029500000D000D0CDB7DEB726960FB6F894DEBF14
+:102960000FBECDBFDF91CF9108951F93CF93DF931B
+:10297000C091790116E080917A01C81799F0D0E0F2
+:102980001C9FF0011D9FF00D1124E558FE4F408162
+:10299000518162817381848195810E94A514219661
+:1029A000C770E9CFDF91CF911F9108954091AB019E
+:1029B0005091AC016091AD017091AE018091AF0179
+:1029C0009091B0010C94A514CF938091B0018295A1
+:1029D0008F7009F05FC08091AD01882309F45AC05F
+:1029E00020917901A0917A016091AB017091AC01C5
+:1029F0008091AE019091AF0131E06F3F09F030E07E
+:102A0000B32FC6E02A1709F445C0009721F07F3F95
+:102A100021F44B2F03C041E001C040E030E040FD15
+:102A200035C0C29FF001C39FF00D1124E558FE4F41
+:102A3000418174132BC04081641328C0428141112D
+:102A400025C0438154814817590710F4415051095A
+:102A5000481B590B483C5105C8F48091B0018F7058
+:102A600080618093B00186E0829FF001839FF00D2A
+:102A70001124E058FE4F80818F70806180838BEA43
+:102A800091E00E943811CF910C94B5142F5F3F4F05
+:102A90002770B8CFCF910895CF92DF92EF92FF9237
+:102AA0000F931F93CF93DF93CDB7DEB762970FB627
+:102AB000F894DEBF0FBECDBF8C0185E0F801DE01CA
+:102AC0001D9601900D928A95E1F7D8014C911196CF
+:102AD0005C91119712966C9112971396ED90FC9061
+:102AE00014977091AB01E091AC012091AE0130914F
+:102AF000AF012115310531F0EF3F31F481E07F3F27
+:102B000019F403C081E001C080E0B82FB170CB2E72
+:102B100080FD6CC1D090AD01DD2009F4F5C0F091CD
+:102B2000B001E216F30638F0C701821B930B883C14
+:102B3000910548F09BC0209530952E0D3F1D283CF7
+:102B4000310508F093C08F2F807F09F052C0E51344
+:102B500014C0741312C0D62E61110FC0FF70F06143
+:102B6000F093B0010E94D6148BEA91E00E943811D4
+:102B70008091B001F80185836CC1EF2831F05F3F8F
+:102B800031F481E04F3F19F403C081E001C080E0DF
+:102B900080FD03C081E0862701C080E0F82FF1703E
+:102BA000FF2E80FF1CC08091790120917A0136E0D0
+:102BB000821709F428C190E0389FF001399FF00D89
+:102BC0001124E558FE4F7181571306C070814713D9
+:102BD00003C07281671303C001968770E9CFD62EB8
+:102BE000662309F436C18091B00181608093B00101
+:102BF00053C0E51308C0741306C0611104C0D801A6
+:102C00001596FC93AEC04D875E878D859E856A8B39
+:102C10000E9471146A89882329F1D62E662311F146
+:102C20002091B001822F82958F7090E002970CF472
+:102C300060C08091AB019091AC0198878F83198619
+:102C4000FB86EA862C87CE01079651C0E51731F145
+:102C50004D875E878D859E856A8B0E9471146A8977
+:102C600081112EC0C8010E943811A4C08F2F807F0F
+:102C700069F77E2DF98AE88A89890E9496148BEA81
+:102C800091E00E943811EBEAF1E086E0DF011D924D
+:102C90008A95E9F70E94D614D12CDBC07413D8CFE3
+:102CA0006111D6CFD8011596FC93C8010E94381146
+:102CB000EBEAF1E086E0DF011D928A95E9F7C9C0F1
+:102CC000D62E662379F22091B001822F82958F70E3
+:102CD00090E0029774F08091AB019091AC019A83DF
+:102CE00089831B82FD82EC822E83CE0101960E9495
+:102CF000381186E0F801ABEAB1E001900D928A95B7
+:102D0000E1F70E94E4146FC0E216F30628F0C70151
+:102D1000821B930B9C0104C0209530952E0D3F1D06
+:102D2000283C310508F052C0D62E662309F49ACF0C
+:102D3000E5132CC074132AC08091B00180FD1DC022
+:102D4000982F92959F70C9F0D80115968C9315977E
+:102D50009F3039F09F5F9295907F8F70892B1596E9
+:102D60008C93C8010E94381186E0F801ABEAB1E00B
+:102D700001900D928A95E1F736C086E0F801ABEA42
+:102D8000B1E001900D928A95E1F763C04D875E87AF
+:102D90008D859E850E947114882379F086E0F80164
+:102DA000ABEAB1E001900D928A95E1F70E94E4143C
+:102DB0000E94D614DD24D3944CC08091B001816070
+:102DC0008093B001C8010E94381143C07E2DF98A5A
+:102DD000E88A89890E949614EBEAF1E086E0DF0137
+:102DE0001D928A95E9F70E94D61433C0662309F430
+:102DF00039CF4D875E878D859E850E94711488230B
+:102E000009F430CFCBCF4D875E878D859E850E949C
+:102E1000D419292F22952F7030E0223031052CF45F
+:102E20009F7041F0811106C00CC0243031052CF494
+:102E30009F7049F4805E883020F0C8010E943811EC
+:102E4000CF2CDC2C06C0D80115969C91907F91F771
+:102E5000F8CF8D2D62960FB6F894DEBF0FBECDBFB2
+:102E6000DF91CF911F910F91FF90EF90DF90CF9066
+:102E700008951F93CF93DF93CDB7DEB72C970FB68E
+:102E8000F894DEBF0FBECDBF4F83588769877A871E
+:102E90008B879C87CE0107960E944C158823C1F032
+:102EA0002F8138858A859B85892B31F03F3F11F032
+:102EB00080E003C02F3FE1F781E0811147C04F81DF
+:102EC000588569857A858B859C850E94A5143EC0AE
+:102ED00086E0FE013796DE01119601900D928A95EB
+:102EE000E1F7FF81E8854A855B854115510531F0A1
+:102EF000EF3F31F481E0FF3F19F403C081E001C0EE
+:102F000080E080FD23C020917A0130E0C901019664
+:102F1000877099276091790170E086179707F1F122
+:102F2000F983EA835D834C8396E0929FD001939F5F
+:102F3000B00D1124A558BE4FFE01319601900D929F
+:102F40009A95E1F780937A010E94B51416E080917A
+:102F5000790190917A01891779F1189FC0011124A4
+:102F600085589E4F0E944C15882331F1E0917901DC
+:102F70001E9FF0011124E558FE4F4081518162816E
+:102F80007381848195810E94A5148091790190E0DC
+:102F900001968770992780937901D9CF0E946D148B
+:102FA00010927A0110927901EBEAF1E086E0DF01FC
+:102FB0001D928A95E9F7CACF2C960FB6F894DEBF1A
+:102FC0000FBECDBFDF91CF911F910895EF92FF9279
+:102FD0000F931F93CF93DF93FC01009709F46FC009
+:102FE000F12CEE24E394EF0121968491843740F490
+:102FF000843008F055C0813081F0823021F15FC00B
+:10300000853709F447C0C0F19CE7980F903708F066
+:1030100056C08F770E94DB1045C08F010E5F1F4F97
+:10302000FE01849190E2980F983050F48770FE2D45
+:1030300001C0FF0F8A95EAF78F2F0E94841A15C0EE
+:103040000E94131014C08F010E5F1F4FFE01849168
+:1030500090E2980F983068F48770FE2D01C0FF0F42
+:103060008A95EAF78F2F0E948A1A0E94AD1AE8010A
+:1030700019C00E94DB10FBCFCF010296FE01C49164
+:10308000CC2361F0EFE9FFE03197F1F700C00000D9
+:10309000C150F6CFCF010296FE01F490EC0102C0C0
+:1030A0000E9413108F2D882341F0EFE9FFE0319744
+:1030B000F1F700C000008150F6CFFE0194CFDF9100
+:1030C000CF911F910F91FF90EF9008950895609315
+:1030D000B5017093B6018093B7019093B8010C9439
+:1030E00059140F931F930091B5011091B6012091CF
+:1030F000B7013091B801062B172B282B392B0093E1
+:10310000B5011093B6012093B7013093B8011F9118
+:103110000F910C9459140F931F930091B5011091C6
+:10312000B6012091B7013091B80106231723282357
+:1031300039230093B5011093B6012093B701309362
+:10314000B8011F910F910C9459140F931F93009184
+:10315000B5011091B6012091B7013091B801062751
+:103160001727282739270093B5011093B60120931C
+:10317000B7013093B8011F910F910C94591410921C
+:10318000B1011092B2011092B3011092B4010C94EB
+:10319000591441E050E060E070E004C0440F551F56
+:1031A000661F771F8A95D2F74093B1015093B20101
+:1031B0006093B3017093B4010C94591441E050E052
+:1031C00060E070E004C0440F551F661F771F8A95AA
+:1031D000D2F78091B1019091B201A091B301B09169
+:1031E000B401842B952BA62BB72B8093B101909320
+:1031F000B201A093B301B093B4010C94591441E00F
+:1032000050E060E070E004C0440F551F661F771F58
+:103210008A95D2F740955095609570958091B1014F
+:103220009091B201A091B301B091B4018423952390
+:10323000A623B7238093B1019093B201A093B30169
+:10324000B093B4010C94591441E050E060E070E098
+:1032500004C0440F551F661F771F8A95D2F78091CF
+:10326000B1019091B201A091B301B091B401842752
+:103270009527A627B7278093B1019093B201A09319
+:10328000B301B093B4010C9459140F931F930091A0
+:10329000B1011091B2012091B3013091B401062B1C
+:1032A000172B282B392B0093B1011093B2012093D7
+:1032B000B3013093B4011F910F910C9459140F93E3
+:1032C0001F930091B1011091B2012091B30130918F
+:1032D000B40106231723282339230093B101109347
+:1032E000B2012093B3013093B4011F910F910C945C
+:1032F00059140F931F930091B1011091B2012091C5
+:10330000B3013091B40106271727282739270093E6
+:10331000B1011093B2012093B3013093B4011F9116
+:103320000F910C9459140895CF92DF92EF92FF926F
+:103330000F931F93CF93DF93EC01C090B501D09012
+:10334000B601E090B701F090B8018091B101909181
+:10335000B201A091B301B091B401C82AD92AEA2AD6
+:10336000FB2A0FE110E0B701A601002E04C07695FC
+:103370006795579547950A94D2F740FD05C00150CF
+:10338000110988F780E007C0BE01802F0E94540712
+:103390000197A9F3802FDF91CF911F910F91FF909B
+:1033A000EF90DF90CF900895CF93DF93EC010E94D0
+:1033B0009419BE010E945407DF91CF910895CB016B
+:1033C0000E94D419089590910C019923D9F09091FD
+:1033D0000D019923B9F0982F9695969596959F3063
+:1033E00088F5E0910E01F0910F01E90FF11D877052
+:1033F00021E030E001C0220F8A95EAF78181822B1B
+:103400008183089540910E0150910F0120E030E03A
+:103410009FEFFA01E20FF31F6281681799F09F3F57
+:1034200019F4611101C0922F2F5F3F4F2E303105EB
+:1034300081F79F3F39F0FA01E90FF11D97FDFA95E9
+:1034400082830895089590910C019923E1F0909161
+:103450000D019923C1F0982F9695969596959F30DA
+:1034600020F5E0910E01F0910F01E90FF11D877039
+:1034700021E030E001C0220F8A95EAF72095818192
+:1034800028232183089540910E0150910F0120E0DF
+:1034900030E0FA01E20FF31F9281981301C012820B
+:1034A0002F5F3F4F2E303105A1F7089581E090E066
+:1034B000E0910E01F0910F01E80FF91F10820196C3
+:1034C00080319105A9F708959091CC01982B9093A4
+:1034D000CC01089580959091CC0198239093CC01D4
+:1034E00008951092CC0108959091CB01982B909360
+:1034F000CB01089580959091CB0198239093CB01B7
+:1035000008951092CB0108959091CA01982B909341
+:10351000CA01089580959091CA0198239093CA0199
+:1035200008951092CA0108958093B90108951092E8
+:10353000B901089540910E0150910F0120E030E053
+:1035400080E0FA01E20FF31F918191118F5F2F5FED
+:103550003F4F2F303105A9F70895E0910E01F0910A
+:103560000F018091CC018083E0910E01F0910F0159
+:1035700080819091CB01892B8083E0910E01F091A5
+:103580000F0180819091CA01892B80839091B901AC
+:10359000992361F0E0910E01F0910F018081892B58
+:1035A00080830E949A1A81111092B90180910E01B4
+:1035B00090910F010C94F60ECF92DF92EF92FF9252
+:1035C0000F931F936C01EE24FF24C114D104E10476
+:1035D000F10421F46B017C0180E001C080E133271C
+:1035E0002F2D1E2D0D2D011511052105310519F069
+:1035F000885F6801790197018601A4E036952795D7
+:1036000017950795AA95D1F70115110521053105E3
+:1036100019F08C5F6801790197018601F2E0369517
+:10362000279517950795FA95D1F7011511052105ED
+:10363000310519F08E5F68017901B701A601769511
+:10364000679557954795452B462B472B09F08F5F7C
+:103650001F910F91FF90EF90DF90CF900895809190
+:10366000E401843021F11092CE0120E488E190E061
+:103670000FB6F894A895809360000FBE2093600069
+:1036800080E00E94EF0783B7817F846083BF83B7A8
+:10369000816083BF7894889583B78E7F83BF88E1EC
+:1036A0000FB6F89480936000109260000FBE0895EA
+:1036B00008950895CF930E94581B0E9423040E94EE
+:1036C000591BC0E08C2F0E941005811105C0CF5FEF
+:1036D000CE30C1F780E001C081E0CF9108950E9413
+:1036E0006D140E94EA0E0C94EF0782E084BD93E013
+:1036F00095BD9AEF97BD80936E0008952FB7F8940B
+:103700008091CF019091D001A091D101B091D201CF
+:103710002FBF0895CF92DF92EF92FF920F931F93E6
+:103720002FB7F8944091CF015091D0016091D10111
+:103730007091D2012FBF6A017B01EE24FF248C011E
+:1037400020E030E0C016D106E206F30610F4415046
+:103750005109481B590BCA011F910F91FF90EF901F
+:10376000DF90CF9008951F920F920FB60F92112401
+:103770008F939F93AF93BF938091CF019091D0018E
+:10378000A091D101B091D2010196A11DB11D8093EC
+:10379000CF019093D001A093D101B093D201BF91FA
+:1037A000AF919F918F910F900FBE0F901F90189522
+:1037B0000E94F00BF8942FEF87EA91E621508040A9
+:1037C0009040E1F700C0000087E090EBDC018093BF
+:1037D000EE019093EF01A093F001B093F1012CE082
+:1037E00088E190E00FB6F894A895809360000FBE32
+:1037F00020936000FFCFEF92FF920F931F93CF9320
+:10380000DF93E82EF12C8F2D0E941005C0E0D0E050
+:10381000082F10E098010C2E02C0359527950A94C8
+:10382000E2F720FD05C02196C630D10599F709C001
+:103830006C2F7F2D80E00E941805E812F4CF81E004
+:1038400005C0F3948EE0F812DECF80E0DF91CF91D7
+:103850001F910F91FF90EF900895CF93C82F8CE2A6
+:103860000E94FB1B882321F08C2FCF910C94FB1B13
+:1038700080E0CF910895CF930E94801D811102C0F6
+:103880000E94661DC5E6C15049F00E9423048FE3E3
+:103890009CE90197F1F700C00000F5CF89E20E9492
+:1038A0002D1C811111C18AE20E942D1C81110E94E0
+:1038B000661D85E00E942D1C81110E94D81B0E946C
+:1038C0008B1D8093CD0187E00E942D1C882399F1E8
+:1038D0008BE10E942D1C882351F09091CD0191FB2A
+:1038E000882780F921E0822780FB91F922C08EE0B1
+:1038F0000E942D1C882351F09091CD0192FB8827C6
+:1039000080F921E0822780FB92F913C080E10E94B8
+:103910002D1C9091CD01882341F093FB882780F9DD
+:1039200021E0822780FB93F904C0892F809580FBDA
+:1039300090F99093CD018091CD010E948F1D0E943E
+:103940009D1D8093ED0180EE0E942D1C882341F087
+:103950008091ED01982F909590FB80F98093ED0177
+:1039600089E30E942D1C882359F09091ED0191FB71
+:10397000882780F921E0822780FB91F99093ED015F
+:1039800082EE0E942D1C882359F09091ED0192FB4C
+:10399000882780F921E0822780FB92F99093ED013E
+:1039A00086EE0E942D1C882359F09091ED0193FB27
+:1039B000882780F921E0822780FB93F99093ED011D
+:1039C00083EE0E942D1C882359F09091ED0194FB09
+:1039D000882780F921E0822780FB94F99093ED01FC
+:1039E00085E30E942D1C882359F09091ED0195FBF1
+:1039F000882780F921E0822780FB95F99093ED01DB
+:103A000081E30E942D1C882359F09091ED0196FBD3
+:103A1000882780F921E0822780FB96F99093ED01B9
+:103A200081E10E942D1C882359F09091ED0197FBB4
+:103A3000882780F921E0822780FB97F99093ED0198
+:103A40008091ED010E94A11D8091ED0187FB8827E7
+:103A500080F980930D0187E20E942D1CC82F8EE112
+:103A60000E942D1C8111C2608FE10E942D1C8111CA
+:103A7000C46080E20E942D1C8111C86081E20E9416
+:103A80002D1C8111C06182E20E942D1C8111C06237
+:103A900083E20E942D1C8111C06484E20E942D1CCF
+:103AA000882311F0C06802C0CC2329F08C2F0E941B
+:103AB000981D6C2F03C00E94941D682F70E080E059
+:103AC00090E0CF910C946718CF9108956DEE7EEF42
+:103AD00080E090E00E94BE2360E082E090E00E94DF
+:103AE000AC2360E083E090E00E94AC2360E084E0DF
+:103AF00090E00E94AC2360E085E090E00C94AC2361
+:103B000080E090E00E94A62321E08D3E9E4F09F0C8
+:103B100020E0822F089582E090E00C949E23682F8D
+:103B200082E090E00C94AC2383E090E00C949E2320
+:103B3000682F83E090E00C94AC2384E090E00C9438
+:103B40009E23682F84E090E00C94AC238091D501F3
+:103B500080FF0BC06091130185E0689FB0011124C4
+:103B600075956795759567952AC081FF09C0609125
+:103B7000130185E0689FB0011124759567951FC0FA
+:103B800082FF07C06091130185E0689FB001112496
+:103B900016C04091D6014423C9F060911201461726
+:103BA00088F72091130185E0289F90011124429FFE
+:103BB000C001439F900D112470E00E947023603873
+:103BC000710540F46115710539F002C065E070E0DF
+:103BD000862F08958FE7089581E008958091D5019B
+:103BE00080FF08C06091110170E07595679575952B
+:103BF000679521C081FF06C06091110170E0759545
+:103C0000679519C082FF04C06091110170E010C077
+:103C10008091D6018823C1F0609110018617A0F72A
+:103C200090911101989FC001112470E00E947023AF
+:103C30006038710528F46115710521F0862F08950B
+:103C40008FE7089581E0089561E070E0F4CF803F50
+:103C500021F40E94A61D819504C0813F29F40E9491
+:103C6000A61D8093D9010895823F21F40E94A61DCC
+:103C7000819504C0833F29F40E94A61D8093D8013A
+:103C80000895893F19F40E94EE1D05C08A3F31F462
+:103C90000E94EE1D81958093DA0108958B3F21F4F7
+:103CA0000E94EE1D819504C08C3F29F40E94EE1DF8
+:103CB0008093DB010895843F21F48091D7018160D6
+:103CC00017C0853F21F48091D701826011C0863FE3
+:103CD00021F48091D70184600BC0873F21F480914B
+:103CE000D701886005C0883F31F48091D701806199
+:103CF0008093D70108958D3F21F48091D501816093
+:103D00000BC08E3F21F48091D501826005C08F3FAA
+:103D100029F48091D50184608093D5010895803F76
+:103D200039F48091D90187FF6CC01092D90169C024
+:103D3000813F29F48091D9011816BCF362C090919B
+:103D4000D801823F29F497FF5CC01092D80159C076
+:103D5000833F19F41916CCF354C0893F41F4809184
+:103D6000DA0118160CF04DC01092DA014AC08A3FF1
+:103D700029F48091DA0187FF44C0F6CF8B3F39F4F4
+:103D80008091DB0187FF3DC01092DB013AC08C3F80
+:103D900029F48091DB011816BCF333C0843F21F471
+:103DA0008091D7018E7F17C0853F21F48091D70184
+:103DB0008D7F11C0863F21F48091D7018B7F0BC08E
+:103DC000873F21F48091D701877F05C0883F31F478
+:103DD0008091D7018F7E8093D70113C08D3F21F44E
+:103DE0008091D5018E7F0BC08E3F21F48091D5014B
+:103DF0008D7F05C08F3F29F48091D5018B7F809303
+:103E0000D5018091D80181110EC08091D901811115
+:103E10000AC08091DA01811106C08091DB01811115
+:103E200002C01092D601089587ED91E00E94010F23
+:103E30000E947E1B9093D4018093D30108951F9319
+:103E4000CF93DF938091D3019091D4010E948A1B7C
+:103E50004091D601442321F02091140130E006C0A6
+:103E6000209115015AE0259F900111248217930794
+:103E700008F482C08091D8011091D901D091DA0163
+:103E8000C091DB01811107C0111105C0D11103C020
+:103E9000CC2309F471C04F3F19F04F5F4093D60116
+:103EA000181624F40E94A61D8093D8018091D80191
+:103EB00087FF05C00E94A61D81958093D801111629
+:103EC00024F40E94A61D8093D9018091D90187FF17
+:103ED00005C00E94A61D81958093D9016091D801EB
+:103EE000662339F11091D901112319F1772767FD64
+:103EF0007095872F972F0E94812223E333E343E3BA
+:103F00005FE30E94E5220E944E226093D801612F58
+:103F1000772767FD7095872F972F0E94812223E3D3
+:103F200033E343E35FE30E94E5220E944E22609365
+:103F3000D9011D1624F40E94EE1D8093DA018091B0
+:103F4000DA0187FF05C00E94EE1D81958093DA019A
+:103F50001C1624F40E94EE1D8093DB018091DB018E
+:103F600087FF05C00E94EE1D81958093DB01DF91E4
+:103F7000CF911F910C94141FDF91CF911F91089541
+:103F8000E7EDF1E085E0DF011D928A95E9F71092F7
+:103F9000D6011092D5010895833081F128F4813043
+:103FA00059F08230D1F00895853009F449C0B8F154
+:103FB000863009F456C0089520911501862F90E0AF
+:103FC000820F911D8F3F910520F4620F60931501C0
+:103FD00008958FEF80931501089520911401862F85
+:103FE00090E0820F911D8F3F910520F4620F609346
+:103FF000140108958FEF8093140108952091130107
+:10400000862F90E0820F911D8F3F910520F4620F63
+:104010006093130108958FEF809313010895209109
+:104020001201862F90E0820F911D8F3F910520F4A1
+:10403000620F6093120108958FEF8093120108952B
+:1040400020911101862F90E0820F911D8F3F9105E5
+:1040500020F4620F6093110108958FEF8093110196
+:10406000089520911001862F90E0820F911D8F3FBF
+:10407000910520F4620F6093100108958FEF8093F3
+:1040800010010895833011F128F4813049F0823015
+:1040900091F00895853081F120F18630C1F10895C5
+:1040A00080911501681720F4861B809315010895EF
+:1040B00010921501089580911401681720F4861B51
+:1040C00080931401089510921401089580911301B2
+:1040D000681720F4861B8093130108951092130132
+:1040E000089580911201681720F4861B80931201B5
+:1040F000089510921201089580911101681720F41B
+:10410000861B8093110108951092110108958091EA
+:104110001001681720F4861B8093100108951092F7
+:10412000100108958D3109F442C020F58E3009F454
+:1041300077C070F4873009F459C018F48630F1F173
+:1041400034C0883009F4A8C08B3009F4A5C02DC054
+:10415000863109F4A1C038F4803109F472C081318C
+:1041600009F479C022C0893109F496C08B3109F471
+:104170004DC01BC0853309F487C048F4873209F469
+:1041800083C008F473C0893209F47EC00EC0833442
+:1041900038F48A3308F068C0883309F47DC005C05C
+:1041A000833409F471C0883499F080E008950E9446
+:1041B00008220E94EA0E0E94EF076EC08091CD0196
+:1041C000817F8E7F8093CD0181E08093DD01089512
+:1041D0000E946D142FEF83ED90E3215080409040BA
+:1041E000E1F700C000000E94D81B56C09091CD019D
+:1041F000892F8095817080FB90F919F09660986006
+:104200001DC0997F977F9093CD0146C09091CD01BD
+:1042100091FB882780F921E0822780FB91F909C072
+:104220009091CD0192FB882780F921E0822780FBC5
+:1042300092F99093CD01882379F191609093CD010B
+:1042400008959091CD0193FB882780F921E0822782
+:1042500080FB93F9EECF0E946D1480910D0191E0E7
+:10426000892780930D0118C027EC01C023EE280F89
+:1042700061E070E080E090E004C0660F771F881F67
+:10428000991F2A95D2F704C061E070E080E090E0C9
+:104290000E9467180E946D1481E0089580E00895DF
+:1042A00080E00895CF93C82F8091DD01813079F0AF
+:1042B00018F08230D1F184C0A0910E01B0910F01AD
+:1042C0008C91813169F0823209F07CC009C0A091E3
+:1042D0000E01B0910F018C91813111F0823249F4BD
+:1042E0008C2F0E944E2181111DC08C2F0E94922084
+:1042F0001AC08C2F0E945021811114C0C43179F052
+:1043000048F4CB3079F0C03109F060C082E080938E
+:10431000DD0108C0C93219F0C83321F057C010922E
+:10432000DD0154C081E0817053C0C93289F118F5B4
+:10433000C43171F1A8F4C73009F046C08AE0809317
+:10434000150194E19093140193E0909313018093ED
+:10435000120188E08093110188E28093100134C03B
+:10436000CE51C63088F5EC2FF0E0E65DFE4F80813F
+:104370008093DC0129C0CE34E9F020F4CB3421F560
+:104380006AE013C0C13579F0C235F1F461E00DC0C7
+:104390008091DC01882319F01092DC0115C081E0C6
+:1043A0008093DD0115C061E006C08091DC010E94B0
+:1043B000CC1F0AC06AE08091DC010E94422004C048
+:1043C0001092DD0180E004C081E002C080E0ABCF4C
+:1043D000CF910895E1E8F0E080818860808380815A
+:1043E000816080838FB7F89493E09093890090ED7B
+:1043F000909388008FBF0895EFE6F0E0808182609F
+:1044000080830895EFE6F0E080818D7F80830895BA
+:10441000EFE6F0E0808192E08927808308951F9283
+:104420000F920FB60F9211242F933F934F935F93E8
+:104430006F937F938F939F93AF93BF93EF93FF936C
+:104440008091DE019091DF0101969093DF018093CE
+:10445000DE01811103C082E00E94EF07E091DF01DD
+:10446000E695E695F0E0E657FB4FE4918091DE019A
+:104470008E1303C080E00E94EF07FF91EF91BF9180
+:10448000AF919F918F917F916F915F914F913F91EC
+:104490002F910F900FBE0F901F90189504D0689425
+:1044A000B1118DC0089570D088F09F5790F0B92F4A
+:1044B0009927B751A0F0D1F0660F771F881F991F79
+:1044C0001AF0BA95C9F712C0B13081F077D0B1E0D7
+:1044D000089574C0672F782F8827B85F39F0B93FE7
+:1044E000CCF3869577956795B395D9F73EF490957B
+:1044F0008095709561957F4F8F4F9F4F0895E894F9
+:1045000009C097FB3EF490958095709561957F4F1B
+:104510008F4F9F4F9923A9F0F92F96E9BB279395C9
+:10452000F695879577956795B795F111F8CFFAF4D9
+:10453000BB0F11F460FF1BC06F5F7F4F8F4F9F4F0A
+:1045400016C0882311F096E911C0772321F09EE868
+:10455000872F762F05C0662371F096E8862F70E0CE
+:1045600060E02AF09A95660F771F881FDAF7880FA8
+:104570009695879597F9089557FD9058440F551FC4
+:1045800059F05F3F71F04795880F97FB991F61F0D5
+:104590009F3F79F087950895121613061406551F4C
+:1045A000F2CF4695F1DF08C0161617061806991FB8
+:1045B000F1CF86957105610508940895E894BB27AD
+:1045C00066277727CB0197F908950BD078C069D07B
+:1045D00028F06ED018F0952309F05AC05FC011245E
+:1045E000EECFCADFA0F3959FD1F3950F50E0551F92
+:1045F000629FF001729FBB27F00DB11D639FAA2738
+:10460000F00DB11DAA1F649F6627B00DA11D661F86
+:10461000829F2227B00DA11D621F739FB00DA11DA7
+:10462000621F839FA00D611D221F749F3327A00D61
+:10463000611D231F849F600D211D822F762F6A2FFD
+:1046400011249F5750408AF0E1F088234AF0EE0F82
+:10465000FF1FBB1F661F771F881F91505040A9F78F
+:104660009E3F510570F014C0AACF5F3FECF3983E17
+:10467000DCF3869577956795B795F795E7959F5FF6
+:10468000C1F7FE2B880F911D9695879597F9089590
+:1046900097F99F6780E870E060E008959FEF80ECF5
+:1046A000089500240A941616170618060906089598
+:1046B00000240A9412161306140605060895092EFE
+:1046C0000394000C11F4882352F0BB0F40F4BF2B6D
+:1046D00011F460FF04C06F5F7F4F8F4F9F4F0895AD
+:1046E00097FB072E16F4009407D077FD09D00E949F
+:1046F0008A2307FC05D03EF4909581959F4F08953D
+:10470000709561957F4F0895EE0FFF1F0590F4910E
+:10471000E02D0994AA1BBB1B51E107C0AA1FBB1FB8
+:10472000A617B70710F0A61BB70B881F991F5A953D
+:10473000A9F780959095BC01CD010895F999FECF18
+:1047400092BD81BDF89A992780B50895A8E1B0E09F
+:1047500042E050E00C94C623262FF999FECF92BD7B
+:1047600081BDF89A019700B4021639F01FBA20BD36
+:104770000FB6F894FA9AF99A0FBE08950196272F6A
+:104780000E94AD230C94AC23DC01CB01FC01F99910
+:10479000FECF06C0F2BDE1BDF89A319600B40D928D
+:0C47A00041505040B8F70895F894FFCF46
+:1047AC002002F1077E085B082708F4070101BA0113
+:1047BC0028080A03140A3F4D36394B04FE03C8037C
+:1047CC008F0322033B0354036D030102030405060C
+:0447DC0007080900C1
+:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/adnw/k_o_y/keymap.c b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/keymap.c
new file mode 100644
index 000000000..e33037b33
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/keymap.c
@@ -0,0 +1,185 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_extras/keymap_german.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | K | . | O | , | Y | L1 | | L1 | V | G | C | L | ß | Z |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | H | A | E | I | U |------| |------| D | T | R | N | S | F |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M | J | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Enter |------| |------| Tab |RShift|
+ * | | | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, DE_K, DE_DOT, DE_O, DE_COMM,DE_Y, TG(SYMB),
+ KC_BSPC, DE_H, DE_A, DE_E, DE_I, DE_U,
+ KC_LSFT, CTL_T(DE_X), DE_Q, DE_AE, DE_UE, DE_OE, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_ENT ,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), DE_V, DE_G, DE_C, DE_L, DE_SS, DE_Z,
+ DE_D, DE_T, DE_R, DE_N, LT(MDIA, DE_S), GUI_T(KC_F),
+ MEH_T(KC_NO),KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_RSFT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ 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, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, 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_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+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) {
+
+};
+
+// 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;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboard/ergodox_ez/keymaps/adnw/k_o_y/readme.md b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/readme.md
new file mode 100644
index 000000000..f0dd3815c
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/adnw/k_o_y/readme.md
@@ -0,0 +1,7 @@
+# Basic implementation for k.o,y variant of the adnw layout
+
+adnw is a layout optimised for usage with german and english language
+k.o,y is a variant of this layout
+http://www.adnw.de/index.php?n=Main.SeitlicheNachbaranschl%C3%A4ge
+
+The os must use the de_DE layout
diff --git a/keyboard/ergodox_ez/keymaps/default_osx/keymap.c b/keyboard/ergodox_ez/keymaps/default_osx/keymap.c
index 81b49ceff..c57ffbb88 100644
--- a/keyboard/ergodox_ez/keymaps/default_osx/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/default_osx/keymap.c
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
- KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_SPC,KC_BSPC,KC_END,
// right hand
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_LGUI,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
@@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
-KEYMAP(
+[MDIA] = KEYMAP(
KC_TRNS, 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,
diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/config_user.h b/keyboard/ergodox_ez/keymaps/erez_experimental/config_user.h
new file mode 100644
index 000000000..d19c2783c
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/erez_experimental/config_user.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config.h"
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#endif
diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex
index ab32e94dd..bdd707165 100644
--- a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex
+++ b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex
@@ -1,235 +1,235 @@
-:100000000C9465020C94A9020C94A9020C94A90208
-:100010000C94A9020C94A9020C94A9020C94A902B4
-:100020000C94A9020C94A9020C94A00C0C94720DCF
-:100030000C94A9020C94A9020C94A9020C94A90294
-:100040000C94A9020C9446220C94A9020C94A902C7
-:100050000C94A9020C94EA1B0C94A9020C94A9021A
-:100060000C94A9020C94A9020C94A9020C94A90264
-:100070000C94A9020C94A9020C94A9020C94A90254
-:100080000C94A9020C94A9020C94A9020C94A90244
-:100090000C94A9020C94A9020C94A9020C94A90234
-:1000A0000C94A9020C94A9020C94A902D70DF90D85
-:1000B000E40EF90DE40E3B0E5E0EE40EB30EC60E1A
-:1000C000C011C0110112011243127F127F147F145C
-:1000D00097127F148E138E1359147F147F146D148E
-:1000E0000000F0A12E004C002A00003035810000F5
-:1000F0001E00140004001D7134004D001F001A0082
-:1001000016001B00E104C1002000080007000600E3
-:1001100050002C0021001500090019004F004A0072
-:10012000220017000A000500000065745000015409
-:1001300000002F7F0000E3004F00015400003077E3
-:100140000000E20023001C000B00110000002971D8
-:10015000240018000D74100052004B0025000C0004
-:100160000E00360051002800260012000F00370054
-:100170002F002B81270013003382387130004E008E
-:100180002D003100347801302D0000000100010005
-:1001900001000100010000003A001E0022002602BA
-:1001A000010001003B001F002300270201000100A5
-:1001B0003C00200024002F004B0101003D002100E5
-:1001C000250030004E0101003E00010026002700FE
-:1001D000000001000100010000000100000001001A
-:1001E0000100010000000100000001003F000100CB
-:1001F0002402310200000100400022022D022602EA
-:100200000100010041002E002D0027020100010025
-:1002100042001F0213002000010001004300010002
-:100220002E02010001000100440045000100010010
-:1002300001000000010001000100010001000000B8
-:1002400001000100010001000100010001000100A6
-:10025000F2000100010001000100F000F1000100C6
-:10026000F400010001000100F3000100F5000100AD
-:100270000100010001000100000001000100010077
-:100280000000010000000100010001000000010069
-:100290000000010001000100010001000000010058
-:1002A0000100010001000100A9000100010001009E
-:1002B0000100AC00AA00B600010001000100AB0083
-:1002C000A80001000100010001000100010001007F
-:1002D00001000100AE00010001000000160345000E
-:1002E000720067006F0044006F0078002000450036
-:1002F0005A00000016034500720067006F004400BA
-:100300006F007800200045005A0000000403090433
-:1003100009026D00040100A0FA09040000010301B4
-:100320000100092111010001223F00070581030896
-:10033000000A090401000103010200092111010062
-:1003400001224D000705820308000A09040200018A
-:100350000300000009211101000122360007058376
-:100360000308000A09040300010300000009211129
-:100370000100012239000705840310000112011059
-:100380000100000008EDFE07130100010200010555
-:10039000010906A101050719E029E71500250195C6
-:1003A0000875018102050819012905950575019156
-:1003B000029501750391010507190029771500259C
-:1003C00001957875018102C005010980A1018502AE
-:1003D00016010026B7001A01002AB7007510950112
-:1003E0008100C0050C0901A1018503160100269CAE
-:1003F000021A01002A9C02751095018100C00501B6
-:100400000902A1010901A100050919012905150029
-:10041000250195057501810295017503810105018D
-:10042000093009311581257F950275088106093843
-:100430001581257F950175088106050C0A3802157E
-:1004400081257F950175088106C0C005010906A1B7
-:1004500001050719E029E7150025019508750181B7
-:100460000295017508810105081901290595057591
-:100470000191029501750391010507190029FF15E6
-:100480000025FF950675088100C0000000000000EF
-:100490000000000000010204060A0F17202C3A4A4F
-:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
-:1004B000B39D87715D4A3A2C20170F0A060402018A
-:1004C0000000000000000000000011241FBECFEF5C
-:1004D000DAE0DEBFCDBF04B603FE24C08091F00198
-:1004E0009091F101A091F201B091F3018730904B0E
-:1004F000A740B04BB9F41092F0011092F1011092A4
-:10050000F2011092F30114BE84B7877F84BF88E1A3
-:100510000FB6F89480936000109260000FBEE0E088
-:10052000FFE3099511E0A0E0B1E0EAE1F8E402C0E0
-:1005300005900D92A433B107D9F711E0A4E3B1E01F
-:1005400001C01D92A03FB107E1F70E94E6090C949B
-:100550000B240C940000662319F06130F1F03DC0CB
-:10056000FC018281882341F00E94B51B90933501E4
-:100570008093340181EE1CC080913401909135014B
-:100580000E94C11B8634910534F486E20E94481013
-:1005900086E20E94101181EE1EC0FC018281882338
-:1005A00051F00E94B51B909335018093340185EE84
-:1005B0000E94481012C080913401909135010E9430
-:1005C000C11B8634910534F487E20E94481087E20B
-:1005D0000E94101185EE0E94101180E090E00895B5
-:1005E00008956091B3017091B4018091B50190912B
-:1005F000B6010E94131B56985E9825982D98269850
-:100600002E9827982F98813019F0823021F0089584
-:10061000259A2D9A0895269A2E9A08950C94F102FF
-:1006200056985E9825982D9826982E9827982F985A
-:100630008FEF90E0909389008093880090938B00D7
-:1006400080938A0090938D0080938C00259A2D9A38
-:100650002FEF80E792E0215080409040E1F700C00A
-:100660000000269A2E9A2FEF80E792E021508040DA
-:100670009040E1F700C00000279A2F9A2FEF80E703
-:1006800092E0215080409040E1F700C000002598A2
-:100690002D982FEF80E792E0215080409040E1F7C5
-:1006A00000C0000026982E982FEF80E792E021509E
-:1006B00080409040E1F700C0000027982F9856989E
-:1006C0005E9825982D9826982E9827982F9808950B
-:1006D00089EA8093800089E08093810024982C9897
-:1006E0003F988AB18F748AB96E98479A8BB1806BA4
-:1006F0008BB9769A0E9410030C94F00280E28093EA
-:1007000000018091360181110EC00E94CD0381E06D
-:10071000809336012FEF83ED90E32150804090408D
-:10072000E1F700C0000080E40E94D3038093000141
-:1007300081112EC00E94FD0380930001811128C009
-:100740000E94FD0380930001811122C08FE30E946B
-:10075000FD038093000181111BC00E94F50380E41A
-:100760000E94D30380930001811112C08CE00E948B
-:10077000FD038093000181110BC00E94FD03809353
-:100780000001811105C08FE30E94FD0380930001E9
-:100790000E94F5038091000108951092B9008AE04B
-:1007A0008093B800089594EA9093BC009091BC00A7
-:1007B00097FFFCCF9091B900987F983021F090314D
-:1007C00011F081E008958093BB0084E88093BC0021
-:1007D0008091BC0087FFFCCF8091B900887F883171
-:1007E00011F0803471F780E0089584E98093BC00B3
-:1007F0008091BC0084FDFCCF08958093BB0084E809
-:100800008093BC008091BC0087FFFCCF9091B90021
-:10081000987F81E0983209F480E0089584E880931D
-:10082000BC008091BC0087FFFCCF8091BB00089585
-:1008300080910001811115C080E40E94D303809350
-:10084000000181110CC082E10E94FD038093000130
-:10085000811105C08FEF0E94FD03809300010E946B
-:10086000F50384B1807F84B985B1807F85B98AB171
-:10087000837F8AB98BB1837F8BB93E984698089560
-:100880000E947E03809300010E94180480B38C7044
-:1008900080BB81B3836F81BBE6E4F1E0A8E3B1E004
-:1008A00011921D9281E0E435F807D1F70C946803AA
-:1008B000BF92CF92DF92EF92FF920F931F93CF934D
-:1008C000DF9380910001882379F0809137018F5F59
-:1008D00080933701811108C00E947E03809300013C
-:1008E000811102C00E94100308E311E0C0E0D0E0D3
-:1008F000DD24D39482E0C82EEE24E394F12CC7309B
-:1009000000F580910001811162C080E40E94D30350
-:1009100080930001811112C082E10E94FD03809347
-:10092000000181110BC0C7010C2E01C0880F0A9471
-:10093000EAF780950E94FD03809300010E94F50371
-:1009400046C0CA30A1F028F4C83059F0C93061F06F
-:1009500005C0CC3089F070F0CD3089F0209A28980D
-:1009600010C0219A29980DC0229A2A980AC0239A69
-:100970002B9807C0529A01C0539A5B9802C03E9AC6
-:100980004698E0EAEA95F1F78FB179995AC092E07A
-:1009900081708D25892B7C9B02C090E001C094E082
-:1009A000892B7D9B02C090E001C098E0892B7E9B43
-:1009B00002C090E001C090E1892B9FB19095991FF2
-:1009C0009927991F9295990F907E892B0FC080913E
-:1009D000000181114BC080E40E94D3038093000189
-:1009E000882389F1B12C0E94F5038B2DF8019081A9
-:1009F000981719F08083C09201010E941804219673
-:100A00000F5F1F4FCE30D10509F079CF80910101E2
-:100A1000882371F1815080930101882339F08FE997
-:100A20009FE00197F1F700C0000022C0A6E4B1E00A
-:100A3000E8E3F1E081918D9391E0E634F907D1F795
-:100A400017C090E0A5CF83E10E94FD0380930001D1
-:100A50008111C8CF81E40E94D303809300018111EA
-:100A6000C1CF0E940E04B82EB094BDCF80E0BECF9F
-:100A70000E940E0381E0DF91CF911F910F91FF90B3
-:100A8000EF90DF90CF90BF900895E82FF0E0EA5B01
-:100A9000FE4F808108950895089596E0799FF001B2
-:100AA000112494E5899FE00DF11D1124E60FF11D3D
-:100AB000EE0FFF1FEC51FF4F859194910895880F21
-:100AC000991F805A9040FC01859194910895880F58
-:100AD000991F80529F4FFC018591949108950F9327
-:100AE0001F93CF93DF93EC01811520E3920730F53C
-:100AF000811530E2930708F0B1C08B3B910588F473
-:100B0000883A910508F058C0853A910508F049C027
-:100B10008430910508F043C08130910509F4B2C1D9
-:100B2000AEC18F3F910509F0D0F5803F910508F0E7
-:100B300092C0805E9109089790F1A1C1C11581E52D
-:100B4000D807A8F4C23090E5D90708F09FC0C115B6
-:100B500020E5D20709F486C008F092C0C11580E4F0
-:100B6000D80708F08CC18E011127106CCCC1C115BB
-:100B700090E8D90758F4C11520E7D20708F07BC1E7
-:100B8000C11530E6D30708F423C179C1C11580E946
-:100B9000D80708F074C18E011F70106AB4C18E01AD
-:100BA000B2C1853A910509F470C1863A910509F4FC
-:100BB0006FC103E810E4A7C1883A910509F46BC13D
-:100BC000893A910509F46AC18A3A910509F469C123
-:100BD0008B3A910509F468C18C3A910509F467C113
-:100BE0008D3A910509F466C1803B910509F465C110
-:100BF0008E3A910509F464C18F3A910509F463C1F5
-:100C0000813B910509F462C1823B910509F461C100
-:100C1000833B910509F460C1843B910509F45FC1F0
-:100C2000853B910509F45EC1863B910509F45DC1E0
-:100C3000873B910509F45CC1883B910509F45BC1D0
-:100C4000893B910509F45AC18A3B910509F059C1C4
-:100C50000AE216E458C18C01106555C19F700E94CC
-:100C6000670552C10E94A2149FEF24E33CE091501B
-:100C700020403040E1F700C000000E940F1C43C13B
-:100C80008091CF0181608093CF013DC10E94B71D4B
-:100C9000811102C00E949D1D0E94D41D90E090937E
-:100CA000F0018093EF01C23080E5D80721F48091F4
-:100CB000EF01816086C0C43090E5D90721F48091AE
-:100CC000EF0182607EC0C63020E5D20721F480911A
-:100CD000EF01846076C0C83030E5D30719F4809105
-:100CE000EF0127C0CA3080E5D80721F48091EF01D9
-:100CF000806167C0CC3090E5D90721F48091EF0185
-:100D000080625FC0CE3020E5D20721F48091EF01F0
-:100D1000806457C0C03130E5D30721F48091EF01E2
-:100D200080684FC0C23180E5D80729F48091EF0177
-:100D30008460886046C0C33090E5D90721F4809173
-:100D4000EF018E7F3EC0C53020E5D20721F48091AF
-:100D5000EF018D7F36C0C73030E5D30721F4809195
-:100D6000EF018B7F2EC0C93080E5D80719F4809140
-:100D7000EF0126C0CB3090E5D90721F48091EF0137
-:100D80008F7E1FC0CD3020E5D20721F48091EF0186
-:100D90008F7D17C0CF3030E5D30721F48091EF016C
-:100DA0008F7B0FC0C13180E5D80721F48091EF011E
-:100DB0008F7707C0C331D04531F48091EF018B7F2D
-:100DC000877F8093EF018091EF010E94D81D9BC027
-:100DD0008D2F99278F70992781309105E9F48E0125
-:100DE000037011279C0102C0220F331F0A95E2F7FE
-:100DF00089011C68CE0164E0880F991F6A95E1F7AC
-:100E000088279370082B192B73E0CC0FDD1F7A9580
-:100E1000E1F7C076DD272CC08230910529F41C2F24
-:100E20000027016F106A6FC08330910561F4CE0115
-:100E30008370992701E010E002C0000F111F8A950E
-:100E4000E2F71C680EC0049709F05DC0CE01837004
-:100E5000992701E010E002C0000F111F8A95E2F708
-:100E60001A6843E0CC0FDD1F4A95E1F7C07ED770CA
-:100E70000C2B1D2B48C08E011F70106244C000E077
+:100000000C945C020C94A0020C94A0020C94A0022C
+:100010000C94A0020C94A0020C94A0020C94A002D8
+:100020000C94A0020C94A0020C94970C0C94690DF3
+:100030000C94D61B0C94A0020C94A0020C94A00269
+:100040000C94A0020C94A0020C94A0020C94A002A8
+:100050000C94A0020C943D1C0C94A0020C94A002E1
+:100060000C94A0020C94A0020C94A0020C94A00288
+:100070000C94A0020C94A0020C94A0020C94A00278
+:100080000C94A0020C94A0020C94A0020C94A00268
+:100090000C94A0020C94A0020C94A0020C94A00258
+:1000A0000C94A0020C94A0020C94A002CE0DF00DB2
+:1000B000DB0EF00DDB0E320E550EDB0EAA0EBD0E62
+:1000C000CC11CC11FB11FB1146126812CF13CF13C8
+:1000D0007312CF131C131C13C013CF13CF13C913E8
+:1000E0002913291329132913291329132913291330
+:1000F0002913291329132913291329132913291320
+:100100003A1348134F13561360130000F0A100C8B0
+:1001100001C82E004C002A000030358100001E006E
+:10012000140004001D7134004D001F001A00160059
+:100130001B00E104C1002000080007000600500079
+:100140002C0021001500090019004F004A00220070
+:1001500017000A00050000006574500001540000FB
+:100160002F7F0000E3004F000154000030770000B3
+:10017000E20023001C000B00110000002971240084
+:1001800018000D74100052004B0025000C000E00EA
+:10019000360051002800260012000F0037002F0003
+:1001A0002B81270013003382387130004E002D0060
+:1001B0003100347801302D81000001000100010080
+:1001C0000100010000003A0001001E0023000100B0
+:1001D00001003B0001001F002400010001003C0061
+:1001E0000100200025004B0101003D00010021001D
+:1001F00026004E0101003E00010022002700000001
+:1002000001000100010000000100000001000100E8
+:10021000010000000100000001003F000100240275
+:10022000310200000100400001002D021F02010008
+:100230000100410001002D002E00010001004200DC
+:1002400001001300220201000100430001002E0200
+:10025000010001000100440045000100010001000F
+:100260000000010001000100010001000000010088
+:1002700001004B00010001000100010001004A00E3
+:10028000010001000100010001004D00010001001A
+:100290000100010001004E00010001000100010009
+:1002A0000100010001000000010001000100000048
+:1002B0000100000001000100010000000100000039
+:1002C0000100010001000100010000000100010027
+:1002D000010001000100A90001000100010001006E
+:1002E000AC00AA00B600010001000100AB00A800AC
+:1002F00001000100010001000100010001000100F6
+:100300000100AE000100010000001603450072006C
+:1003100067006F0044006F007800200045005A001D
+:10032000000016034500720067006F0044006F0074
+:100330007800200045005A00000004030904090267
+:100340006D00040100A0FA0904000001030101008E
+:10035000092111010001223F000705810308000A5D
+:100360000904010001030102000921110100012219
+:100370004D000705820308000A090402000103007A
+:10038000000009211101000122360007058303083E
+:10039000000A090403000103000000092111010003
+:1003A0000122390007058403100001120110010029
+:1003B000000008EDFE07130100010200010501091C
+:1003C00006A101050719E029E71500250195087523
+:1003D000018102050819012905950575019102950C
+:1003E000017503910105071900297715002501956D
+:1003F0007875018102C005010980A10185021601FD
+:100400000026B7001A01002AB70075109501810077
+:10041000C0050C0901A1018503160100269C021AE2
+:1004200001002A9C02751095018100C00501090296
+:10043000A1010901A10005091901290515002501DE
+:10044000950575018102950175038101050109304A
+:1004500009311581257F95027508810609381581B6
+:10046000257F950175088106050C0A38021581253E
+:100470007F950175088106C0C005010906A1010527
+:100480000719E029E71500250195087501810295F6
+:100490000175088101050819012905950575019166
+:1004A000029501750391010507190029FF15002523
+:1004B000FF950675088100C011241FBECFEFDAE05A
+:1004C000DEBFCDBF04B603FE24C08091F20190913F
+:1004D000F301A091F401B091F5018730904BA74052
+:1004E000B04BB9F41092F2011092F3011092F401A2
+:1004F0001092F50114BE84B7877F84BF88E10FB6E0
+:10050000F89480936000109260000FBEE0E0FFE37B
+:10051000099511E0A0E0B1E0EAEEF7E402C0059031
+:100520000D92A433B107D9F711E0A4E3B1E001C003
+:100530001D92A23FB107E1F70E94DF090C94F3235B
+:100540000C940000CF93DF93EC01662319F0613027
+:1005500079F031C08A818823C9F082E00E94561167
+:100560008D81982F907F71F080FD0CC086E21BC0BA
+:100570008A818823D9F082E00E9456118D81982FBC
+:10058000907F71F48D818F708D8315C08D81807FF8
+:1005900019F086E20E94071182E00E945D110BC0F3
+:1005A00080FDF0CF87E20E943F1005C08D81807FE3
+:1005B00099F387E2EFCF80E090E0DF91CF9108954B
+:1005C00008956091B1017091B2018091B301909151
+:1005D000B4010E943D1B56985E9825982D98269848
+:1005E0002E9827982F98813019F0823021F00895A5
+:1005F000259A2D9A0895269A2E9A08950C94E10230
+:1006000056985E9825982D9826982E9827982F987A
+:100610008FEF90E0909389008093880090938B00F7
+:1006200080938A0090938D0080938C00259A2D9A58
+:100630002FEF80E792E0215080409040E1F700C02A
+:100640000000269A2E9A2FEF80E792E021508040FA
+:100650009040E1F700C00000279A2F9A2FEF80E723
+:1006600092E0215080409040E1F700C000002598C2
+:100670002D982FEF80E792E0215080409040E1F7E5
+:1006800000C0000026982E982FEF80E792E02150BE
+:1006900080409040E1F700C0000027982F985698BE
+:1006A0005E9825982D9826982E9827982F9808952B
+:1006B00089EA8093800089E08093810024982C98B7
+:1006C0003F988AB18F748AB96E98479A8BB1806BC4
+:1006D0008BB9769A0E9400030C94E00280E280932A
+:1006E00000018091340181110EC00E94BD0381E0A0
+:1006F000809334012FEF83ED90E3215080409040B0
+:10070000E1F700C0000080E40E94C3038093000171
+:1007100081112EC00E94ED0380930001811128C039
+:100720000E94ED0380930001811122C08FE30E949B
+:10073000ED038093000181111BC00E94E50380E45A
+:100740000E94C30380930001811112C08CE00E94BB
+:10075000ED038093000181110BC00E94ED03809393
+:100760000001811105C08FE30E94ED038093000119
+:100770000E94E5038091000108951092B9008AE07B
+:100780008093B800089594EA9093BC009091BC00C7
+:1007900097FFFCCF9091B900987F983021F090316D
+:1007A00011F081E008958093BB0084E88093BC0041
+:1007B0008091BC0087FFFCCF8091B900887F883191
+:1007C00011F0803471F780E0089584E98093BC00D3
+:1007D0008091BC0084FDFCCF08958093BB0084E829
+:1007E0008093BC008091BC0087FFFCCF9091B90042
+:1007F000987F81E0983209F480E0089584E880933E
+:10080000BC008091BC0087FFFCCF8091BB000895A5
+:1008100080910001811115C080E40E94C303809380
+:10082000000181110CC082E10E94ED038093000160
+:10083000811105C08FEF0E94ED03809300010E949B
+:10084000E50384B1807F84B985B1807F85B98AB1A1
+:10085000837F8AB98BB1837F8BB93E984698089580
+:100860000E946E03809300010E94080480B38C7084
+:1008700080BB81B3836F81BBE4E4F1E0A6E3B1E028
+:1008800011921D9281E0E235F807D1F70C945803DC
+:10089000BF92CF92DF92EF92FF920F931F93CF936D
+:1008A000DF9380910001882379F0809135018F5F7B
+:1008B00080933501811108C00E946E03809300016E
+:1008C000811102C00E94000306E311E0C0E0D0E005
+:1008D000DD24D39482E0C82EEE24E394F12CC730BB
+:1008E00000F580910001811162C080E40E94C30381
+:1008F00080930001811112C082E10E94ED03809378
+:10090000000181110BC0C7010C2E01C0880F0A9491
+:10091000EAF780950E94ED03809300010E94E503B1
+:1009200046C0CA30A1F028F4C83059F0C93061F08F
+:1009300005C0CC3089F070F0CD3089F0209A28982D
+:1009400010C0219A29980DC0229A2A980AC0239A89
+:100950002B9807C0529A01C0539A5B9802C03E9AE6
+:100960004698E0EAEA95F1F78FB179995AC092E09A
+:1009700081708D25892B7C9B02C090E001C094E0A2
+:10098000892B7D9B02C090E001C098E0892B7E9B63
+:1009900002C090E001C090E1892B9FB19095991F12
+:1009A0009927991F9295990F907E892B0FC080915E
+:1009B000000181114BC080E40E94C30380930001B9
+:1009C000882389F1B12C0E94E5038B2DF8019081D9
+:1009D000981719F08083C09201010E9408042196A3
+:1009E0000F5F1F4FCE30D10509F079CF8091010103
+:1009F000882371F1815080930101882339F08FE9B8
+:100A00009FE00197F1F700C0000022C0A4E4B1E02C
+:100A1000E6E3F1E081918D9391E0E434F907D1F7B9
+:100A200017C090E0A5CF83E10E94ED038093000101
+:100A30008111C8CF81E40E94C3038093000181111A
+:100A4000C1CF0E94FE03B82EB094BDCF80E0BECFD0
+:100A50000E94FE0281E0DF91CF911F910F91FF90E4
+:100A6000EF90DF90CF90BF900895E82FF0E0EC5B1F
+:100A7000FE4F808108950895089596E0799FF001D2
+:100A8000112494E5899FE00DF11D1124E60FF11D5D
+:100A9000EE0FFF1FEE5EFE4F859194910895880F33
+:100AA000991F86579040FC01859194910895880F75
+:100AB000991F865F9E4FFC018591949108950F9335
+:100AC0001F93CF93DF93EC01811520E3920730F55C
+:100AD000811530E2930708F0B1C08B3B910588F493
+:100AE000883A910508F058C0853A910508F049C048
+:100AF0008430910508F043C08130910509F4C2C1EA
+:100B0000BEC18F3F910509F0D0F5803F910508F0F7
+:100B100092C0805E9109089790F1B1C1C11581E53D
+:100B2000D807A8F4C23090E5D90708F09FC0C115D6
+:100B300020E5D20709F486C008F092C0C11580E410
+:100B4000D80708F09CC18E011127106CDCC1C115BB
+:100B500090E8D90758F4C11520E7D20708F08BC1F7
+:100B6000C11530E6D30708F423C189C1C11580E956
+:100B7000D80708F084C18E011F70106AC4C18E01AD
+:100B8000C2C1853A910509F480C1863A910509F4FC
+:100B90007FC103E810E4B7C1883A910509F47BC12D
+:100BA000893A910509F47AC18A3A910509F479C123
+:100BB0008B3A910509F478C18C3A910509F477C113
+:100BC0008D3A910509F476C1803B910509F475C110
+:100BD0008E3A910509F474C18F3A910509F473C1F5
+:100BE000813B910509F472C1823B910509F471C101
+:100BF000833B910509F470C1843B910509F46FC1F1
+:100C0000853B910509F46EC1863B910509F46DC1E0
+:100C1000873B910509F46CC1883B910509F46BC1D0
+:100C2000893B910509F46AC18A3B910509F069C1C4
+:100C30000AE216E468C18C01106565C19F700E94CC
+:100C4000570562C10E9419149FEF24E33CE09150C4
+:100C500020403040E1F700C000000E94621C53C1F8
+:100C60008091D30181608093D3014DC10E940A1EFF
+:100C7000811102C00E94F01D0E94271E90E09093F7
+:100C8000F2018093F101C23080E5D80721F4809110
+:100C9000F101816086C0C43090E5D90721F48091CC
+:100CA000F10182607EC0C63020E5D20721F4809138
+:100CB000F101846076C0C83030E5D30719F4809123
+:100CC000F10127C0CA3080E5D80721F48091F101F5
+:100CD000806167C0CC3090E5D90721F48091F101A3
+:100CE00080625FC0CE3020E5D20721F48091F1010F
+:100CF000806457C0C03130E5D30721F48091F10101
+:100D000080684FC0C23180E5D80729F48091F10195
+:100D10008460886046C0C33090E5D90721F4809193
+:100D2000F1018E7F3EC0C53020E5D20721F48091CD
+:100D3000F1018D7F36C0C73030E5D30721F48091B3
+:100D4000F1018B7F2EC0C93080E5D80719F480915E
+:100D5000F10126C0CB3090E5D90721F48091F10153
+:100D60008F7E1FC0CD3020E5D20721F48091F101A4
+:100D70008F7D17C0CF3030E5D30721F48091F1018A
+:100D80008F7B0FC0C13180E5D80721F48091F1013C
+:100D90008F7707C0C331D04531F48091F1018B7F4B
+:100DA000877F8093F1018091F1010E942B1EABC0DF
+:100DB0008D2F99278F70992781309105E9F48E0145
+:100DC000037011279C0102C0220F331F0A95E2F71E
+:100DD00089011C68CE01E4E0880F991FEA95E1F7CC
+:100DE00088279370082B192BF3E0CC0FDD1FFA95A1
+:100DF000E1F7C076DD272CC08230910529F41C2F45
+:100E00000027016F106A7FC08330910561F4CE0125
+:100E10008370992701E010E002C0000F111F8A952E
+:100E2000E2F71C680EC084309105A9F4CE018370EE
+:100E3000992701E010E002C0000F111F8A95E2F728
+:100E40001A6863E0CC0FDD1F6A95E1F7C07ED770AA
+:100E50000C2B1D2B58C08530910529F41C2F002721
+:100E6000046F106A50C0069709F04DC0CF71DD279E
+:100E70001C2F002702C08E011F70106244C000E0CA
:100E800010E041C001E010E03EC001E810E43BC0CA
:100E900002E810E438C002EE14E435C009EE14E4B0
:100EA00032C00AEE14E42FC005EB14E42CC006EBAC
@@ -240,43 +240,43 @@
:100EF00005E216E408C006E216E405C007E216E4BF
:100F000002C000E014E4C801DF91CF911F910F915E
:100F1000089596E0799FF001112494E5899FE00DF2
-:100F2000F11D1124E60FF11DEE0FFF1FEC51FF4FD5
+:100F2000F11D1124E60FF11DEE0FFF1FEE5EFE4FC7
:100F300085919491803E9105E0F4803C910558F5AF
:100F40008133910509F46FC048F48932910509F4A1
:100F500063C08A32910509F46DC072C0893391056E
:100F6000E9F082389105D1F08533910509F44DC03F
:100F700067C0833E910581F138F4803E9105B9F058
:100F8000823E9105D9F05CC0863E910561F1873EB5
-:100F90009105A1F155C00E945F0508952091EF01D0
+:100F90009105A1F155C00E944F0508952091F101DE
:100FA00020FD02C021FF4CC080EE90E049C080913E
-:100FB000EF0180FFF9CF89E390E042C08091EF011B
-:100FC00082FF0EC08091EF0184FF03C080E090E0BB
-:100FD00037C083EE90E034C08091EF0182FFF2CF02
-:100FE00082EE90E02DC08091EF0183FF0BC08091D5
-:100FF000EF0184FDEBCF87EE90E022C08091EF01FE
-:1010000083FFF5CF86EE90E01BC08091EF0185FF56
-:1010100007C089E290E014C08091EF0185FFF9CF0D
-:1010200085E390E00DC08091EF0186FF07C08AE262
-:1010300090E006C08091EF0186FFF9CF81E390E058
-:101040000E946F05089508950C942308809164010F
+:100FB000F10180FFF9CF89E390E042C08091F10117
+:100FC00082FF0EC08091F10184FF03C080E090E0B9
+:100FD00037C083EE90E034C08091F10182FFF2CF00
+:100FE00082EE90E02DC08091F10183FF0BC08091D3
+:100FF000F10184FDEBCF87EE90E022C08091F101FA
+:1010000083FFF5CF86EE90E01BC08091F10185FF54
+:1010100007C089E290E014C08091F10185FFF9CF0B
+:1010200085E390E00DC08091F10186FF07C08AE260
+:1010300090E006C08091F10186FFF9CF81E390E056
+:101040000E945F05089508950C9423088091620121
:101050000895CF93DF9300D01F92CDB7DEB72091D4
-:10106000E601243019F523E029839B838A832093AA
+:10106000E801243019F523E029839B838A832093A8
:10107000E9008FEF9091E800815095FD06C095ED55
:101080009A95F1F700008111F5CF8091E80085FF76
:101090000DC040E050E063E070E0CE0101960E9498
-:1010A000930A8091E8008E778093E8000F900F906C
+:1010A0008A0A8091E8008E778093E8000F900F9075
:1010B0000F90DF91CF910895CF93DF9300D01F92CF
-:1010C000CDB7DEB72091E601243021F522E0298357
+:1010C000CDB7DEB72091E801243021F522E0298355
:1010D0009B838A8383E08093E9008FEF9091E800FF
:1010E000815095FD06C095ED9A95F1F700008111AC
:1010F000F5CF8091E80085FF0DC040E050E063E04F
-:1011000070E0CE0101960E94930A8091E8008E77EC
+:1011000070E0CE0101960E948A0A8091E8008E77F5
:101110008093E8000F900F900F90DF91CF9108958A
-:101120002091E6012430F1F422E02093E9002FEF32
+:101120002091E8012430F1F422E02093E9002FEF30
:101130003091E800215035FD06C035ED3A95F1F7C4
:1011400000002111F5CF2091E80025FF0BC040E001
-:1011500050E065E070E00E94930A8091E8008E778D
-:101160008093E8000895CF93DF93EC018091E6012E
+:1011500050E065E070E00E948A0A8091E8008E7796
+:101160008093E8000895CF93DF93EC018091E8012C
:10117000843009F046C090910C019923D9F09091E8
:101180000D019923B9F08093E9008FEF9091E80069
:10119000815095FD06C095E19A95F1F70000811107
@@ -284,876 +284,873 @@
:1011B00070E017C081E08093E9008FEF9091E80024
:1011C000815095FD06C095ED9A95F1F700008111CB
:1011D000F5CF8091E80085FF14C040E050E068E062
-:1011E00070E0CE010E94930A8091E8008E77809390
-:1011F000E80080E1FE01A4E5B1E001900D928A953E
-:10120000E1F7DF91CF9108958091E501811109C047
-:101210000E94250C0E94820C8091E20084608093E1
-:10122000E20008951092E501089508950C94332288
-:101230000E94A61B0E9439220E941F0F0C942408B2
-:1012400042E061EC81E00E949F0B42E061EC82E0B1
-:101250000E949F0B42E061EC83E00E949F0B42E101
-:1012600061EC84E00C949F0B8091E801833009F4D9
-:1012700055C030F4813071F0823009F48EC0089589
-:101280008A3009F47AC08B3009F460C0893009F0E3
-:101290009CC020C08091E701813A09F096C08091FE
-:1012A000E800877F8093E8008091EB019091EC014A
-:1012B000892B21F060E080E090E003C060E184E5EC
-:1012C00091E070E00E94DC0A8091E8008B778093C7
-:1012D000E80008958091E701813209F076C080919D
-:1012E000EB019091EC01009719F0039709F06DC0A4
-:1012F0008091E800877F8093E8008091E80082FD7C
-:1013000005C08091E6018111F8CF5FC08091F100A6
-:10131000809364018091E8008B7753C08091E7014E
-:10132000813A09F052C08091EB019091EC01892B38
-:1013300009F04BC08091E800877F8093E80080919E
-:10134000E80080FFFCCF80910C0136C08091E7015E
-:101350008132D9F58091EB019091EC01892BA9F5AF
-:101360008091E800877F8093E8000E94D40B8091F1
-:10137000E90180930C010C94A2148091E701813261
-:1013800021F58091E800877F8093E8000E94D40BCC
-:101390008091EA018093650108958091E701813A87
-:1013A000A1F48091E800877F8093E8008091E800B5
-:1013B00080FFFCCF809165018093F1008091E8006F
-:1013C0008E778093E8000C94D40B089584B7877FC0
-:1013D00084BF88E10FB6F89480936000109260009B
-:1013E0000FBE90E080E80FB6F89480936100909370
-:1013F00061000FBE0E946E0F0E94250C0E94820C9D
-:101400008091E20084608093E20078940E94FD0E57
-:101410000E94700F82E091E00E941A0F0E94212228
-:101420008091E601853069F40E94661B8091E40199
-:101430008823B1F30E94911B882391F30E947D0AB7
-:10144000EFCF0E94760FECCF292F332723303105C1
-:10145000A9F06CF42130310509F442C02230310585
-:1014600009F043C08DE690E020E133E042C0213234
-:101470003105C9F02232310519F137C09927813081
-:10148000910541F08230910541F0892B71F5ECE036
-:10149000F3E005C0E4EFF2E002C0ECEDF2E084918D
-:1014A00090E09F0126C0643000F5E62FF0E0EE0FDB
-:1014B000FF1FEE5DFE4F2081318189E090E019C071
-:1014C000643098F4E62FF0E0DF01AA0FBB1FA65EA0
-:1014D000BE4F2D913C91EA5EFE4F808190E009C0A5
-:1014E00082E190E02DE733E004C080E090E020E06E
-:1014F00030E0FA0131832083089580E189BD82E1E3
-:1015000089BD09B400FEFDCF8091D8008F7D809306
-:10151000D8008091E00082608093E0008091E0003C
-:1015200081FDFCCF0895CF92DF92EF92FF920F934F
-:101530001F93CF93DF937C018B01EA010E94F50B8F
-:10154000811131C0209731F088819981081B190BD6
-:10155000E80EF91EC12CD12C0115110519F180914D
-:10156000E80085FD14C08091E8008E778093E80044
-:10157000209741F0888199818C0D9D1D99838883E6
-:1015800085E011C00E94F50B882331F30CC0F701F0
-:1015900081917F018093F10001501109FFEFCF1A73
-:1015A000DF0ADACF80E0DF91CF911F910F91FF909A
-:1015B000EF90DF90CF9008952091ED013091EE01F2
-:1015C0002617370748F06115710539F42091E800B6
-:1015D0002E772093E80001C0B901FC0120E06115DD
-:1015E0007105B9F18091E601882309F440C0853086
-:1015F00009F43FC08091E80083FD3DC08091E80080
-:1016000082FF06C08091E80082FF26C080E0089536
-:101610008091E80080FFE3CF2091F3008091F200F9
-:1016200090E0922B6115710551F08830910538F4E6
-:1016300021912093F100615071090196F3CF21E0CF
-:10164000089709F020E08091E8008E778093E80009
-:10165000C6CF2111C7CFD6CF8091E601882339F0BC
-:10166000853039F08091E80083FFCCCF04C082E060
-:10167000089583E0089581E008952091ED0130916F
-:10168000EE012617370748F06115710539F42091EE
-:10169000E8002E772093E80001C0B901FC0120E0AA
-:1016A00061157105C1F18091E601882309F441C0FB
-:1016B000853009F440C08091E80083FD3EC08091F0
-:1016C000E80082FF06C08091E80082FF27C080E02A
-:1016D00008958091E80080FFE3CF2091F30080918E
-:1016E000F20090E0922B6115710559F08830910558
-:1016F00040F424912093F1003196615071090196D4
-:10170000F2CF21E0089709F020E08091E8008E7781
-:101710008093E800C5CF2111C6CFD5CF8091E601D7
-:10172000882339F0853039F08091E80083FFCBCFF2
-:1017300004C082E0089583E0089581E00895982F21
-:10174000973058F59093E900981739F07091EC00B4
-:101750002091ED005091F00003C0242F762F50E02F
-:1017600021FF19C03091EB003E7F3093EB003091A8
-:10177000ED003D7F3093ED003091EB003160309310
-:10178000EB007093EC002093ED005093F00020915B
-:10179000EE0027FF07C09F5FD3CF8F708093E900D3
-:1017A00081E0089580E008958091E70187FD05C0FC
-:1017B0008091E80080FF0EC012C08091E80082FD99
-:1017C00005C08091E6018111F8CF08958091E8006D
-:1017D0008B7708C08091E6018111EACF089580914E
-:1017E000E8008E778093E80008958091E40090915E
-:1017F000E50045E62091EC0020FF21C02091E800A3
-:1018000020FD21C02091E601222389F0253089F0B6
-:101810002091EB0025FD0FC02091E4003091E50000
-:101820002817390739F3415041F0C901E3CF82E06D
-:10183000089583E0089581E0089584E0089520915B
-:10184000E80022FFDFCF80E008950E94930C0E9401
-:101850009B0CE0EEF0E0808181608083E8EDF0E0B9
-:1018600080818F77808319BCA7EDB0E08C918E7F4B
-:101870008C9380818F7E80831092E50108950F9371
-:101880001F93CF93DF930E94930C0E949B0CC8ED93
-:10189000D0E088818F778883888180688883888179
-:1018A0008F7D888319BC1092E6011092E20110929C
-:1018B000E4011092E30100EE10E0F80180818B7FDB
-:1018C000808388818160888342E060E080E00E94BC
-:1018D0009F0BE1EEF0E080818E7F8083E2EEF0E00E
-:1018E000808181608083808188608083F80180812D
-:1018F0008E7F8083888180618883DF91CF911F9163
-:101900000F910895E8EDF0E080818F7E8083E7ED10
-:10191000F0E080818160808384E082BF81E08093F9
-:10192000E5010C943F0CE8EDF0E080818E7F808330
-:101930001092E20008951092DA001092E1000895EA
-:101940001F920F920FB60F9211242F933F934F9334
-:101950005F936F937F938F939F93AF93BF93EF9317
-:10196000FF938091E10082FF0BC08091E20082FF33
-:1019700007C08091E1008B7F8093E1000E94FC0E04
-:101980008091DA0080FF1FC08091D80080FF1BC0CB
-:101990008091DA008E7F8093DA008091D90080FFF9
-:1019A0000DC080E189BD82E189BD09B400FEFDCF93
-:1019B00081E08093E6010E94040905C019BC1092E1
-:1019C000E6010E9412098091E10080FF19C0809118
-:1019D000E20080FF15C08091E2008E7F8093E200DC
-:1019E0008091E20080618093E2008091D800806263
-:1019F0008093D80019BC85E08093E6010E94160907
-:101A00008091E10084FF30C08091E20084FF2CC00F
-:101A100080E189BD82E189BD09B400FEFDCF8091DE
-:101A2000D8008F7D8093D8008091E1008F7E8093D5
-:101A3000E1008091E2008F7E8093E2008091E200DD
-:101A400081608093E2008091E201882311F084E0BC
-:101A500007C08091E30087FF02C083E001C081E0FE
-:101A60008093E6010E9418098091E10083FF29C05C
-:101A70008091E20083FF25C08091E100877F809301
-:101A8000E10082E08093E6011092E2018091E100A2
-:101A90008E7F8093E1008091E2008E7F8093E20050
-:101AA0008091E20080618093E20042E060E080E0AB
-:101AB0000E949F0B8091F00088608093F0000E944C
-:101AC0001509FF91EF91BF91AF919F918F917F91F8
-:101AD0006F915F914F913F912F910F900FBE0F909B
-:101AE0001F9018951F920F920FB60F9211242F93EB
-:101AF0003F934F935F936F937F938F939F93AF9396
-:101B0000BF93CF93EF93FF93C091E900CF70809183
-:101B1000EC001092E9008091F000877F8093F00044
-:101B200078940E94AE0D1092E9008091F0008860D8
-:101B30008093F000C093E900FF91EF91CF91BF91A6
-:101B4000AF919F918F917F916F915F914F913F9155
-:101B50002F910F900FBE0F901F9018951F93CF934A
-:101B6000DF93CDB7DEB7AA970FB6F894DEBF0FBEEE
-:101B7000CDBFE7EEF1E08091F100819321E0EF3EEF
-:101B8000F207C9F70E9434098091E80083FF1CC165
-:101B90002091E7013091E801832F90E08A30910590
-:101BA00008F012C1FC01EA5AFF4F0C94BB23203805
-:101BB00081F0223809F008C18091EB018F70809389
-:101BC000E9008091EB0085FB882780F91092E900FD
-:101BD00006C08091E3019091E4019111826090919F
-:101BE000E800977F9093E8008093F1001092F10055
-:101BF000C5C0822F8D7F09F0E7C0222319F0223063
-:101C000061F0E2C08091E901813009F0DDC033303C
-:101C100009F080E08093E40128C08091E9018111FE
-:101C200024C02091EB012F7009F4CEC02093E9006D
-:101C30008091EB0080FF19C08091EB00333011F4EC
-:101C4000806211C080618093EB0081E090E0022E01
-:101C500001C0880F0A94EAF78093EA001092EA0024
-:101C60008091EB0088608093EB001092E9008091F6
-:101C7000E800877F86C02111A7C01091E9011F7776
-:101C80008091E3008078812B8093E3008091E800CD
-:101C9000877F8093E8000E94D40B8091E80080FF4A
-:101CA000FCCF8091E30080688093E300112311F062
-:101CB00083E001C082E08093E60186C02058223094
-:101CC00008F082C08091E9019091EA018C3D23E007
-:101CD000920779F583E08A838AE289834FB7F89483
-:101CE000DE01139620E03EE051E2E32FF0E0509356
-:101CF0005700E49120FF03C0E295EF703F5FEF7063
-:101D00008E2F90E0EA3010F0C79601C0C0968D93F8
-:101D10009D932F5F243149F74FBF8091E800877F63
-:101D20008093E8006AE270E0CE0101960E94DC0A2E
-:101D300014C0AE014F5F5F4F6091EB010E94240A17
-:101D4000009709F441C02091E800277F2093E80024
-:101D5000BC0189819A810E943D0B8091E8008B77BC
-:101D60008093E80031C0203879F58091E800877FC2
-:101D70008093E8008091E2018093F1008091E80077
-:101D80008E778093E8000E94D40B1EC021111CC0E6
-:101D90009091E9019230C0F48091E800877F8093B0
-:101DA000E8009093E2010E94D40B8091E20181113E
-:101DB00004C08091E30087FF02C084E001C081E09D
-:101DC0008093E6010E9420098091E80083FF0AC009
-:101DD0008091E800877F8093E8008091EB0080622B
-:101DE0008093EB00AA960FB6F894DEBF0FBECDBF6E
-:101DF000DF91CF911F9108950895CF938091E601CF
-:101E00008823B1F08091E9008F709091EC0090FFF1
-:101E100002C090E801C090E0C92FC82B1092E900E1
-:101E20008091E80083FD0E94AE0DCF70C093E90061
-:101E3000CF91089590936B0180936A010895E0918A
-:101E40006A01F0916B01309721F00190F081E02D53
-:101E5000099480E00895E0916A01F0916B01309758
-:101E600021F00280F381E02D09940895E0916A0148
-:101E7000F0916B01309721F00480F581E02D0994F9
-:101E8000089520916801309169018217930771F0DC
-:101E90009093690180936801E0916A01F0916B0170
-:101EA000309721F00680F781E02D09940895209164
-:101EB0006601309167018217930771F09093670173
-:101EC00080936601E0916A01F0916B01309721F0F7
-:101ED0000084F185E02D0994089508950C946D0F08
-:101EE0000E94AC1B0E9440040C94721CCF92DF92A3
-:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F
-:101F00002B970FB6F894DEBF0FBECDBF0E945804CA
-:101F10003DE6E32E31E0F32E00E010E0C02E802FEE
-:101F20000E944505F701D1907F01D826B1F40F5FDB
-:101F30001F4F0E30110591F78FEF89838A831B8223
-:101F40000E94B51B8160782F9D838C8349815A81C3
-:101F50006B818D810E94191041C09091CF0191FF3A
-:101F600004C08B870E944B058B8520E030E04D2D0F
-:101F700050E0922FBA01022E02C0759567950A941F
-:101F8000E2F760FF25C02E83CF82EE24E394F12C8C
-:101F900002C0EE0CFF1C9A95E2F790E08E219F2183
-:101FA00021E0892B09F420E028870E94B51B81607D
-:101FB000782F9A8789874E815F8168858A850E94FC
-:101FC0001910F801E359FE4F80818E25808306C0E9
-:101FD0002F5F3F4F2630310561F6A9CF0E94561F73
-:101FE00010916C010E941F0F1817A1F00E941F0F83
-:101FF00080936C012B960FB6F894DEBF0FBECDBF59
-:10200000DF91CF911F910F91FF90EF90DF90CF90D4
-:102010000C9424082B960FB6F894DEBF0FBECDBFEC
-:10202000DF91CF911F910F91FF90EF90DF90CF90B4
-:102030000895CF93DF93CDB7DEB72B970FB6F89403
-:10204000DEBF0FBECDBF4F83588769877A878B87E6
-:10205000DE01119686E0FD0111928A95E9F785E08F
-:10206000FE01379601900D928A95E1F749815A81D8
-:102070006B817C818D819E810E946E172B960FB69D
-:10208000F894DEBF0FBECDBFDF91CF9108950895C4
-:10209000CF93C82F882309F4C1C0823859F40E9415
-:1020A0001F0F81FDBBC089E30E941A1A0E94E41A27
-:1020B00089E30CC0833879F40E941F0F80FDAEC005
-:1020C00083E50E941A1A0E94E41A83E50E945A1AB4
-:1020D000CF910C94E41A843859F40E941F0F82FDAA
-:1020E0009DC087E40E941A1A0E94E41A87E4EECF8A
-:1020F0008CEF8C0F813A48F48C2F0E94892181113A
-:102100008DC08C2F0E941A1AE3CF80E28C0F88308A
-:1021100048F4C77081E001C0880FCA95EAF70E94B1
-:102120009B1AD6CF8BE58C0F833078F4C53A29F013
-:10213000C63A31F482E890E005C081E890E002C040
-:1021400083E890E0CF910C94410F88E58C0F8331A8
-:1021500008F064C0C83A39F1C93A41F1CA3A49F1C4
-:10216000CB3A51F1CC3A59F1CD3A61F1C03B69F12A
-:10217000CE3A71F1CF3A79F1C13B81F1C23B89F19D
-:10218000C33B91F1C43B99F1C53BA1F1C63BA9F119
-:10219000C73BB1F1C83BB9F1C93BC1F1CA3BC9F575
-:1021A0008AE292E038C082EE90E035C089EE90E09D
-:1021B00032C08AEE90E02FC085EB90E02CC086EB19
-:1021C00090E029C087EB90E026C08CEC90E023C023
-:1021D0008DEC90E020C083E891E01DC08AE891E09A
-:1021E0001AC082E991E017C084E991E014C081E24D
-:1021F00092E011C083E292E00EC084E292E00BC054
-:1022000085E292E008C086E292E005C087E292E0B3
-:1022100002C080E090E0CF910C94570FCF910895C9
-:10222000882309F44BC0823859F40E941F0F81FFA4
-:1022300045C089E30E941A1A0E94E41A89E30CC07F
-:10224000833871F40E941F0F80FF38C083E50E941D
-:102250001A1A0E94E41A83E50E945A1A0C94E41A8E
-:10226000843859F40E941F0F82FF28C087E40E941F
-:102270001A1A0E94E41A87E4EFCF9CEF980F913A64
-:1022800058F390E2980F983050F4877091E001C0B5
-:10229000990F8A95EAF7892F0E94A11ADFCF9BE553
-:1022A000980F933020F480E090E00C94410F885A0E
-:1022B000833120F480E090E00C94570F0895882338
-:1022C00021F00E949B1A0C94E41A0895882321F0AF
-:1022D0000E94A11A0C94E41A0895CF92DF92EF9213
-:1022E000FF920F931F93CF93DF93CDB7DEB728975D
-:1022F0000FB6F894DEBF0FBECDBF8C0185E0F801AC
-:10230000DE01119601900D928A95E1F7F801D080D7
-:10231000E180F280558152955F7023813481232BB7
-:1023200039F0FFEFEF1206C081E0DF1203C003C0F7
-:1023300081E001C080E080FDE2C2C8015F830E94AD
-:102340004710D982EA8269817A818F2D0E94161AFC
-:102350009E8388870E94CA190E949D184E815F81C2
-:102360006885FF2029F00E94B81A68855F814E8138
-:10237000E42FE295EF70F0E0E05AFF4F0C94BB239E
-:10238000842F807F142F1F70882311F01295107FE7
-:10239000FF20B1F0112309F467C280E2860F883074
-:1023A00028F4812F68870E949B1A04C0812F6887B8
-:1023B0000E94AB1A688568870E94E41A688554C237
-:1023C000862F68870E9410116885112309F497C22F
-:1023D000605E812F683018F40E94A11A02C00E942A
-:1023E000B11A28960FB6F894DEBF0FBECDBFDF91AD
-:1023F000CF911F910F91FF90EF90DF90CF900C94B1
-:10240000E41A242F207F842F8F70203211F08295C0
-:10241000807F662319F0613019F12BC0FF20B1F0E5
-:10242000552309F493C1513009F090C128960FB695
-:10243000F894DEBF0FBECDBFDF91CF911F910F91FA
-:10244000FF90EF90DF90CF900C94CB1A552319F0AA
-:10245000513009F454C28E830E94CE1A8E8189C1F4
-:10246000FF2021F0523008F04AC270C1511147C21A
-:1024700080C1FF2021F0552309F468C1F5C155231F
-:1024800009F477C105C2242F26952695237030E0E4
-:102490002115310521F021303105C9F030C2FF206E
-:1024A00021F0862F942F937002C080E090E0289650
-:1024B0000FB6F894DEBF0FBECDBFDF91CF911F9155
-:1024C0000F91FF90EF90DF90CF900C94410FFF2081
-:1024D00021F0862F942F937002C080E090E0289620
-:1024E0000FB6F894DEBF0FBECDBFDF91CF911F9125
-:1024F0000F91FF90EF90DF90CF900C94570F862FA5
-:10250000FF2019F00E945E1E02C00E94C61E28967F
-:102510000FB6F894DEBF0FBECDBFDF91CF911F91F4
-:102520000F91FF90EF90DF90CF900C944B1F842F72
-:10253000837009F076C0F110E2C1262F229526950E
-:102540002770220F220F862F8F70C82ED12CE12CDE
-:10255000F12C022E04C0CC0CDD1CEE1CFF1C0A94D6
-:10256000D2F764FF10C06FE070E080E090E004C03C
-:10257000660F771F881F991F2A95D2F7609570956F
-:102580008095909503C060E070E0CB01242F2695E4
-:1025900026952370422F50E042305105D1F0433050
-:1025A000510559F16C297D298E299F29413051050A
-:1025B00041F128960FB6F894DEBF0FBECDBFDF9174
-:1025C000CF911F910F91FF90EF90DF90CF900C94DF
-:1025D000C2186C297D298E299F2928960FB6F89458
-:1025E000DEBF0FBECDBFDF91CF911F910F91FF9046
-:1025F000EF90DF90CF900C94DC180E94C218C701B6
-:10260000B60128960FB6F894DEBF0FBECDBFDF919E
-:10261000CF911F910F91FF90EF90DF90CF900C948E
-:10262000A818FF2019F0842F817001C08695882397
-:1026300009F465C1262F229526952770220F220FB7
-:10264000862F8F70C82ED12CE12CF12C022E04C0C5
-:10265000CC0CDD1CEE1CFF1C0A94D2F764FF10C0EA
-:102660006FE070E080E090E004C0660F771F881F85
-:10267000991F2A95D2F7609570958095909503C023
-:1026800060E070E0CB01242F269526952370422F21
-:1026900050E042305105D1F04330510559F16C29D9
-:1026A0007D298E299F294130510541F128960FB689
-:1026B000F894DEBF0FBECDBFDF91CF911F910F9178
-:1026C000FF90EF90DF90CF900C9496196C297D29A4
-:1026D0008E299F2928960FB6F894DEBF0FBECDBF76
-:1026E000DF91CF911F910F91FF90EF90DF90CF90EE
-:1026F0000C94B0190E949619C701B60128960FB61E
-:10270000F894DEBF0FBECDBFDF91CF911F910F9127
-:10271000FF90EF90DF90CF900C947C19603FC9F14F
-:1027200018F4603E50F49BC0623F09F460C008F4A6
-:102730004AC0633F09F46FC092C0162F1F70842FE8
-:102740008F71FF2099F00E941519812F28960FB6DE
-:10275000F894DEBF0FBECDBFDF91CF911F910F91D7
-:10276000FF90EF90DF90CF900C945F110E9436198C
-:10277000812F28960FB6F894DEBF0FBECDBFDF9134
-:10278000CF911F910F91FF90EF90DF90CF900C941D
-:102790006611FF20A1F05111B2C0842F8F712896CD
-:1027A0000FB6F894DEBF0FBECDBFDF91CF911F9162
-:1027B0000F91FF90EF90DF90CF900C945B19523007
-:1027C00008F09DC0EACFFF20A1F0842F8F712896DA
-:1027D0000FB6F894DEBF0FBECDBFDF91CF911F9132
-:1027E0000F91FF90EF90DF90CF900C941519FF2080
-:1027F00061F3842F8F7128960FB6F894DEBF0FBE59
-:10280000CDBFDF91CF911F910F91FF90EF90DF909F
-:10281000CF900C943619FF2091F0842F8F71289659
-:102820000FB6F894DEBF0FBECDBFDF91CF911F91E1
-:102830000F91FF90EF90DF90CF900C9400192896A5
-:102840000FB6F894DEBF0FBECDBFDF91CF911F91C1
-:102850000F91FF90EF90DF90CF900C94F618FF202F
-:10286000A1F0552309F4B1CF862F28960FB6F8941E
-:10287000DEBF0FBECDBFDF91CF911F910F91FF90B3
-:10288000EF90DF90CF900C944810552309F4B1CF0E
-:10289000862F28960FB6F894DEBF0FBECDBFDF910E
-:1028A000CF911F910F91FF90EF90DF90CF900C94FC
-:1028B00010114F70C8010E94AB0228960FB6F89411
-:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063
-:1028D000EF90DF90CF900C941B184F70C801289692
-:1028E0000FB6F894DEBF0FBECDBFDF91CF911F9121
-:1028F0000F91FF90EF90DF90CF900C944C052896AD
-:102900000FB6F894DEBF0FBECDBFDF91CF911F9100
-:102910000F91FF90EF90DF90CF9008950E94B81A2A
-:102920000E94C81A0E948D1A0E94E41A0E94F71F82
-:102930000E944B1F80E090E00E94410F80E090E0F9
-:102940000C94570F0E94A81A0C948E140E940B1A14
-:10295000292F22952F7030E02C3031054CF42A308D
-:1029600031056CF4225031092230310590F407C052
-:102970002C30310551F02F30310539F00AC0803E3E
-:1029800010F0803F31F481E0089593FB882780F9AF
-:10299000089580E00895CF93DF9300D000D01F9278
-:1029A000CDB7DEB70F900F900F900F900F90DF9183
-:1029B000CF910895CF93DF9300D000D000D0CDB752
-:1029C000DEB726960FB6F894DEBF0FBECDBFDF91FF
-:1029D000CF9108951F93CF93DF93C0917B0116E0B1
-:1029E00080917C01C81799F0D0E01C9FF0011D9FD9
-:1029F000F00D1124E358FE4F4081518162817381B3
-:102A0000848195810E94DA142196C770E9CFDF9105
-:102A1000CF911F9108954091AD015091AE01609109
-:102A2000AF017091B0018091B1019091B2010C940D
-:102A3000DA14CF938091B20182958F7009F05FC054
-:102A40008091AF01882309F45AC020917B01A091A5
-:102A50007C016091AD017091AE018091B0019091C7
-:102A6000B10131E06F3F09F030E0B32FC6E02A1723
-:102A700009F445C0009721F07F3F21F44B2F03C09C
-:102A800041E001C040E030E040FD35C0C29FF001B0
-:102A9000C39FF00D1124E358FE4F418174132BC0E6
-:102AA0004081641328C04281411125C04381548173
-:102AB0004817590710F441505109481B590B483C1D
-:102AC0005105C8F48091B2018F7080618093B2018A
-:102AD00086E0829FF001839FF00D1124EE57FE4F98
-:102AE00080818F70806180838DEA91E00E946D11FA
-:102AF000CF910C94EA142F5F3F4F2770B8CFCF913E
-:102B00000895CF92DF92EF92FF920F931F93CF938E
-:102B1000DF93CDB7DEB762970FB6F894DEBF0FBE76
-:102B2000CDBF8C0185E0F801DE011D9601900D926C
-:102B30008A95E1F7D8014C9111965C911197129604
-:102B40006C9112971396ED90FC9014977091AD01D3
-:102B5000E091AE012091B0013091B1012115310514
-:102B600031F0EF3F31F481E07F3F19F403C081E0A1
-:102B700001C080E0B82FB170CB2E80FD6CC1D09029
-:102B8000AF01DD2009F4F5C0F091B201E216F306C1
-:102B900038F0C701821B930B883C910548F09BC01D
-:102BA000209530952E0D3F1D283C310508F093C02F
-:102BB0008F2F807F09F052C0E51314C0741312C028
-:102BC000D62E61110FC0FF70F061F093B2010E9428
-:102BD0000B158DEA91E00E946D118091B201F80110
-:102BE00085836CC1EF2831F05F3F31F481E04F3FC6
-:102BF00019F403C081E001C080E080FD03C081E0E2
-:102C0000862701C080E0F82FF170FF2E80FF1CC0E6
-:102C100080917B0120917C0136E0821709F428C164
-:102C200090E0389FF001399FF00D1124E358FE4FDA
-:102C30007181571306C07081471303C072816713F7
-:102C400003C001968770E9CFD62E662309F436C1FA
-:102C50008091B20181608093B20153C0E51308C036
-:102C6000741306C0611104C0D8011596FC93AEC060
-:102C70004D875E878D859E856A8B0E94A6146A8922
-:102C8000882329F1D62E662311F12091B201822FDB
-:102C900082958F7090E002970CF460C08091AD0136
-:102CA0009091AE0198878F831986FB86EA862C87E0
-:102CB000CE01079651C0E51731F14D875E878D85AE
-:102CC0009E856A8B0E94A6146A8981112EC0C80154
-:102CD0000E946D11A4C08F2F807F69F77E2DF98A25
-:102CE000E88A89890E94CB148DEA91E00E946D11D7
-:102CF000EDEAF1E086E0DF011D928A95E9F70E9496
-:102D00000B15D12CDBC07413D8CF6111D6CFD801ED
-:102D10001596FC93C8010E946D11EDEAF1E086E082
-:102D2000DF011D928A95E9F7C9C0D62E662379F294
-:102D30002091B201822F82958F7090E0029774F0FB
-:102D40008091AD019091AE019A8389831B82FD82AF
-:102D5000EC822E83CE0101960E946D1186E0F8016F
-:102D6000ADEAB1E001900D928A95E1F70E94191544
-:102D70006FC0E216F30628F0C701821B930B9C017B
-:102D800004C0209530952E0D3F1D283C310508F0DC
-:102D900052C0D62E662309F49ACFE5132CC07413C3
-:102DA0002AC08091B20180FD1DC0982F92959F701E
-:102DB000C9F0D80115968C9315979F3039F09F5F15
-:102DC0009295907F8F70892B15968C93C8010E94E5
-:102DD0006D1186E0F801ADEAB1E001900D928A959F
-:102DE000E1F736C086E0F801ADEAB1E001900D925E
-:102DF0008A95E1F763C04D875E878D859E850E9429
-:102E0000A614882379F086E0F801ADEAB1E00190DC
-:102E10000D928A95E1F70E9419150E940B15DD2489
-:102E2000D3944CC08091B20181608093B201C801FB
-:102E30000E946D1143C07E2DF98AE88A89890E941B
-:102E4000CB14EDEAF1E086E0DF011D928A95E9F707
-:102E50000E940B1533C0662309F439CF4D875E8776
-:102E60008D859E850E94A614882309F430CFCBCF90
-:102E70004D875E878D859E850E940B1A292F22958E
-:102E80002F7030E0223031052CF49F7041F0811119
-:102E900006C00CC0243031052CF49F7049F4805ECC
-:102EA000883020F0C8010E946D11CF2CDC2C06C0A8
-:102EB000D80115969C91907F91F7F8CF8D2D629651
-:102EC0000FB6F894DEBF0FBECDBFDF91CF911F913B
-:102ED0000F91FF90EF90DF90CF9008951F93CF93C5
-:102EE000DF93CDB7DEB72C970FB6F894DEBF0FBED9
-:102EF000CDBF4F83588769877A878B879C87CE01A0
-:102F000007960E9481158823C1F02F8138858A8514
-:102F10009B85892B31F03F3F11F080E003C02F3FAC
-:102F2000E1F781E0811147C04F81588569857A8535
-:102F30008B859C850E94DA143EC086E0FE013796A0
-:102F4000DE01119601900D928A95E1F7FF81E885E7
-:102F50004A855B854115510531F0EF3F31F481E041
-:102F6000FF3F19F403C081E001C080E080FD23C071
-:102F700020917C0130E0C90101968770992760910A
-:102F80007B0170E086179707F1F1F983EA835D838F
-:102F90004C8396E0929FD001939FB00D1124A358CB
-:102FA000BE4FFE01319601900D929A95E1F7809304
-:102FB0007C010E94EA1416E080917B0190917C01D3
-:102FC000891779F1189FC001112483589E4F0E94E0
-:102FD0008115882331F1E0917B011E9FF0011124BE
-:102FE000E358FE4F408151816281738184819581D4
-:102FF0000E94DA1480917B0190E0019687709927F6
-:1030000080937B01D9CF0E94A21410927C01109270
-:103010007B01EDEAF1E086E0DF011D928A95E9F798
-:10302000CACF2C960FB6F894DEBF0FBECDBFDF918E
-:10303000CF911F910895EF92FF920F931F93CF931B
-:10304000DF939C01009709F471C0F12CEE24E39406
-:10305000E9012196F9018491843740F4843008F025
-:1030600056C0813081F0823021F160C0853709F48B
-:1030700049C0C0F19CE7980F903708F057C08F7790
-:103080000E94101146C089010E5F1F4FFE018491FE
-:1030900090E2980F983050F48770FE2D01C0FF0F1A
-:1030A0008A95EAF78F2F0E94BB1A15C00E9448101C
-:1030B00014C089010E5F1F4FFE01849190E2980FAA
-:1030C000983068F48770FE2D01C0FF0F8A95EAF7EB
-:1030D0008F2F0E94C11A0E94E41AE8011AC00E94B0
-:1030E0001011FBCF2E5F3F4FFE01C491CC2341F066
-:1030F0008FE99FE00197F1F700C00000C150F6CFC3
-:10310000E90107C0FE01F490E901229602C00E9485
-:1031100048108F2D882341F0EFE9FFE03197F1F758
-:1031200000C000008150F6CF9E0192CFDF91CF9179
-:103130001F910F91FF90EF90089508956093B7014C
-:103140007093B8018093B9019093BA010C948E14D6
-:103150000F931F930091B7011091B8012091B9010D
-:103160003091BA01062B172B282B392B0093B7016E
-:103170001093B8012093B9013093BA011F910F91B8
-:103180000C948E140F931F930091B7011091B80106
-:103190002091B9013091BA0106231723282339233E
-:1031A0000093B7011093B8012093B9013093BA018D
-:1031B0001F910F910C948E140F931F930091B701E0
-:1031C0001091B8012091B9013091BA010627172753
-:1031D000282739270093B7011093B8012093B9012C
-:1031E0003093BA011F910F910C948E141092B30179
-:1031F0001092B4011092B5011092B6010C948E1485
-:1032000041E050E060E070E004C0440F551F661FCD
-:10321000771F8A95D2F74093B3015093B40160931E
-:10322000B5017093B6010C948E1441E050E060E05B
-:1032300070E004C0440F551F661F771F8A95D2F7B0
-:103240008091B3019091B401A091B501B091B60104
-:10325000842B952BA62BB72B8093B3019093B401AD
-:10326000A093B501B093B6010C948E1441E050E0E8
-:1032700060E070E004C0440F551F661F771F8A95F9
-:10328000D2F740955095609570958091B3019091DB
-:10329000B401A091B501B091B60184239523A62372
-:1032A000B7238093B3019093B401A093B501B09379
-:1032B000B6010C948E1441E050E060E070E004C070
-:1032C000440F551F661F771F8A95D2F78091B3016F
-:1032D0009091B401A091B501B091B60184279527D2
-:1032E000A627B7278093B3019093B401A093B501AB
-:1032F000B093B6010C948E140F931F930091B301F9
-:103300001091B4012091B5013091B601062B172B15
-:10331000282B392B0093B3011093B4012093B501EE
-:103320003093B6011F910F910C948E140F931F933D
-:103330000091B3011091B4012091B5013091B60113
-:1033400006231723282339230093B3011093B401D4
-:103350002093B5013093B6011F910F910C948E14F8
-:103360000F931F930091B3011091B4012091B50107
-:103370003091B60106271727282739270093B30174
-:103380001093B4012093B5013093B6011F910F91B2
-:103390000C948E140895CF92DF92EF92FF920F93C8
-:1033A0001F93CF93DF93EC01C090B701D090B80189
-:1033B000E090B901F090BA018091B3019091B4010D
-:1033C000A091B501B091B601C82AD92AEA2AFB2AF0
-:1033D0000FE110E0B701A601002E04C076956795B5
-:1033E000579547950A94D2F740FD05C00150110941
-:1033F00088F780E007C0BE01802F0E9489070197EF
-:10340000A9F3802FDF91CF911F910F91FF90EF9043
-:10341000DF90CF900895CF93DF93EC010E94CB19FA
-:10342000BE010E948907DF91CF910895CB010E94D0
-:103430000B1A089590910C019923D9F090910D01E8
-:103440009923B9F0982F9695969596959F3088F583
-:10345000E0910E01F0910F01E90FF11D877021E05D
-:1034600030E001C0220F8A95EAF78181822B8183A7
-:10347000089540910E0150910F0120E030E09FEF40
-:10348000FA01E20FF31F6281681799F09F3F19F468
-:10349000611101C0922F2F5F3F4F2E30310581F710
-:1034A0009F3F39F0FA01E90FF11D97FDFA958283EC
-:1034B0000895089590910C019923E1F090910D01E8
-:1034C0009923C1F0982F9695969596959F3020F563
-:1034D000E0910E01F0910F01E90FF11D877021E0DD
-:1034E00030E001C0220F8A95EAF7209581812823D8
-:1034F0002183089540910E0150910F0120E030E0AA
-:10350000FA01E20FF31F9281981301C012822F5F1C
-:103510003F4F2E303105A1F7089581E090E0E09112
-:103520000E01F0910F01E80FF91F10820196803112
-:103530009105A9F708959091CE01982B9093CE0113
-:10354000089580959091CE0198239093CE0108958F
-:103550001092CE0108959091CD01982B9093CD01BA
-:10356000089580959091CD0198239093CD01089571
-:103570001092CD0108959091CC01982B9093CC019D
-:10358000089580959091CC0198239093CC01089553
-:103590001092CC0108958093BB0108951092BB0155
-:1035A000089540910E0150910F0120E030E080E03D
-:1035B000FA01E20FF31F918191118F5F2F5F3F4F4F
-:1035C0002F303105A9F70895E0910E01F0910F0118
-:1035D0008091CE018083E0910E01F0910F018081F6
-:1035E0009091CD01892B8083E0910E01F0910F0124
-:1035F00080819091CC01892B80839091BB0199238C
-:1036000061F0E0910E01F0910F018081892B8083A0
-:103610000E94D11A81111092BB0180910E019091EC
-:103620000F010C942B0FCF92DF92EF92FF920F932A
-:103630001F936C01EE24FF24C114D104E104F104B2
-:1036400021F46B017C0180E001C080E133272F2D44
-:103650001E2D0D2D011511052105310519F0885F6D
-:103660006801790197018601A4E0369527951795A1
-:103670000795AA95D1F7011511052105310519F016
-:103680008C5F6801790197018601F2E036952795F4
-:1036900017950795FA95D1F7011511052105310503
-:1036A00019F08E5F68017901B701A60176956795DB
-:1036B00057954795452B462B472B09F08F5F1F9158
-:1036C0000F91FF90EF90DF90CF9008958091E601E9
-:1036D000843021F11092D00120E488E190E00FB60F
-:1036E000F894A895809360000FBE2093600080E05E
-:1036F0000E94240883B7817F846083BF83B7816081
-:1037000083BF7894889583B78E7F83BF88E10FB697
-:10371000F89480936000109260000FBE08950895A1
-:103720000895CF930E948F1B0E9458040E94901B03
-:10373000C0E08C2F0E944505811105C0CF5FCE30BF
-:10374000C1F780E001C081E0CF9108950E94A214EA
-:103750000E941F0F0C94240882E084BD93E095BD65
-:103760009AEF97BD80936E0008952FB7F8948091DB
-:10377000D1019091D201A091D301B091D4012FBF7A
-:103780000895CF92DF92EF92FF920F931F932FB77E
-:10379000F8944091D1015091D2016091D301709180
-:1037A000D4012FBF6A017B01EE24FF248C0120E0AD
-:1037B00030E0C016D106E206F30610F4415051097C
-:1037C000481B590BCA011F910F91FF90EF90DF909A
-:1037D000CF9008951F920F920FB60F9211248F93DE
-:1037E0009F93AF93BF938091D1019091D201A0910B
-:1037F000D301B091D4010196A11DB11D8093D101D7
-:103800009093D201A093D301B093D401BF91AF9113
-:103810009F918F910F900FBE0F901F9018950E944F
-:10382000250CF8942FEF87EA91E6215080409040D4
-:10383000E1F700C0000087E090EBDC018093F0012D
-:103840009093F101A093F201B093F3012CE088E191
-:1038500090E00FB6F894A895809360000FBE209377
-:103860006000FFCFEF92FF920F931F93CF93DF93F0
-:10387000E82EF12C8F2D0E944505C0E0D0E0082FE6
-:1038800010E098010C2E02C0359527950A94E2F7B6
-:1038900020FD05C02196C630D10599F709C06C2FCF
-:1038A0007F2D80E00E944D05E812F4CF81E005C035
-:1038B000F3948EE0F812DECF80E0DF91CF911F917C
-:1038C0000F91FF90EF900895CF93C82F8CE20E9444
-:1038D000321C882321F08C2FCF910C94321C80E075
-:1038E000CF910895CF930E94B71D811102C00E940D
-:1038F0009D1DC5E6C15049F00E9458048FE39CE924
-:103900000197F1F700C00000F5CF89E20E94641C26
-:10391000811111C18AE20E94641C81110E949D1DC7
-:1039200085E00E94641C81110E940F1C0E94C21D30
-:103930008093CF0187E00E94641C882399F18BE17A
-:103940000E94641C882351F09091CF0191FB88273D
-:1039500080F921E0822780FB91F922C08EE00E944D
-:10396000641C882351F09091CF0192FB882780F945
-:1039700021E0822780FB92F913C080E10E94641C41
-:103980009091CF01882341F093FB882780F921E0B3
-:10399000822780FB93F904C0892F809580FB90F9E2
-:1039A0009093CF018091CF010E94C61D0E94D41D2B
-:1039B0008093EF0180EE0E94641C882341F0809187
-:1039C000EF01982F909590FB80F98093EF0189E3A8
-:1039D0000E94641C882359F09091EF0191FB882785
-:1039E00080F921E0822780FB91F99093EF0182EE2C
-:1039F0000E94641C882359F09091EF0192FB882764
-:103A000080F921E0822780FB92F99093EF0186EE06
-:103A10000E94641C882359F09091EF0193FB882742
-:103A200080F921E0822780FB93F99093EF0183EEE8
-:103A30000E94641C882359F09091EF0194FB882721
-:103A400080F921E0822780FB94F99093EF0185E3D0
-:103A50000E94641C882359F09091EF0195FB882700
-:103A600080F921E0822780FB95F99093EF0181E3B3
-:103A70000E94641C882359F09091EF0196FB8827DF
-:103A800080F921E0822780FB96F99093EF0181E194
-:103A90000E94641C882359F09091EF0197FB8827BE
-:103AA00080F921E0822780FB97F99093EF018091C4
-:103AB000EF010E94D81D8091EF0187FB882780F9D4
-:103AC00080930D0187E20E94641CC82F8EE10E9442
-:103AD000641C8111C2608FE10E94641C8111C4606A
-:103AE00080E20E94641C8111C86081E20E94641C13
-:103AF0008111C06182E20E94641C8111C06283E274
-:103B00000E94641C8111C06484E20E94641C8823AA
-:103B100011F0C06802C0CC2329F08C2F0E94CF1D69
-:103B20006C2F03C00E94CB1D682F70E080E090E0F6
-:103B3000CF910C949E18CF9108956DEE7EEF80E0AA
-:103B400090E00E94F52360E082E090E00E94E32391
-:103B500060E083E090E00E94E32360E084E090E096
-:103B60000E94E32360E085E090E00C94E32380E092
-:103B700090E00E94DD2321E08D3E9E4F09F020E081
-:103B8000822F089582E090E00C94D523682F82E084
-:103B900090E00C94E32383E090E00C94D523682F0D
-:103BA00083E090E00C94E32384E090E00C94D52330
-:103BB000682F84E090E00C94E3238091D70180FF8C
-:103BC0000BC06091130185E0689FB00111247595C9
-:103BD0006795759567952AC081FF09C060911301AB
-:103BE00085E0689FB0011124759567951FC082FF1D
-:103BF00007C06091130185E0689FB001112416C0D1
-:103C00004091D8014423C9F060911201461788F70A
-:103C10002091130185E0289F90011124429FC0014B
-:103C2000439F900D112470E00E94A7236038710516
-:103C300040F46115710539F002C065E070E0862F2F
-:103C400008958FE7089581E008958091D70180FF5E
-:103C500008C06091110170E075956795759567953D
-:103C600021C081FF06C06091110170E075956795D4
-:103C700019C082FF04C06091110170E010C08091F2
-:103C8000D8018823C1F0609110018617A0F79091A8
-:103C90001101989FC001112470E00E94A723603891
-:103CA000710528F46115710521F0862F08958FE7BD
-:103CB000089581E0089561E070E0F4CF803F21F441
-:103CC0000E94DD1D819504C0813F29F40E94DD1D05
-:103CD0008093DB010895823F21F40E94DD1D8195D0
-:103CE00004C0833F29F40E94DD1D8093DA0108950A
-:103CF000893F19F40E94251E05C08A3F31F40E94B5
-:103D0000251E81958093DC0108958B3F21F40E944C
-:103D1000251E819504C08C3F29F40E94251E8093A6
-:103D2000DD010895843F21F48091D901816017C09D
-:103D3000853F21F48091D901826011C0863F21F432
-:103D40008091D90184600BC0873F21F48091D90113
-:103D5000886005C0883F31F48091D90180618093EB
-:103D6000D90108958D3F21F48091D70181600BC066
-:103D70008E3F21F48091D701826005C08F3F29F4E6
-:103D80008091D70184608093D7010895803F39F4F2
-:103D90008091DB0187FF6CC01092DB0169C0813F1D
-:103DA00029F48091DB011816BCF362C09091DA010E
-:103DB000823F29F497FF5CC01092DA0159C0833F1B
-:103DC00019F41916CCF354C0893F41F48091DC01F9
-:103DD00018160CF04DC01092DC014AC08A3F29F43D
-:103DE0008091DC0187FF44C0F6CF8B3F39F480918E
-:103DF000DD0187FF3DC01092DD013AC08C3F29F400
-:103E00008091DD011816BCF333C0843F21F480910A
-:103E1000D9018E7F17C0853F21F48091D9018D7F14
-:103E200011C0863F21F48091D9018B7F0BC0873F61
-:103E300021F48091D901877F05C0883F31F48091BA
-:103E4000D9018F7E8093D90113C08D3F21F48091D9
-:103E5000D7018E7F0BC08E3F21F48091D7018D7FDB
-:103E600005C08F3F29F48091D7018B7F8093D701C4
-:103E70008091DA0181110EC08091DB0181110AC0AD
-:103E80008091DC01811106C08091DD01811102C0A9
-:103E90001092D801089589ED91E00E94360F0E949A
-:103EA000B51B9093D6018093D50108951F93CF93AE
-:103EB000DF938091D5019091D6010E94C11B409162
-:103EC000D801442321F02091140130E006C0209154
-:103ED00015015AE0259F900111248217930708F4D9
-:103EE00082C08091DA011091DB01D091DC01C09198
-:103EF000DD01811107C0111105C0D11103C0CC2310
-:103F000009F471C04F3F19F04F5F4093D801181664
-:103F100024F40E94DD1D8093DA018091DA0187FF8D
-:103F200005C00E94DD1D81958093DA01111624F4ED
-:103F30000E94DD1D8093DB018091DB0187FF05C0BE
-:103F40000E94DD1D81958093DB016091DA0166237B
-:103F500039F11091DB01112319F1772767FD709575
-:103F6000872F972F0E94B82223E333E343E35FE3D5
-:103F70000E941C230E9485226093DA01612F77271B
-:103F800067FD7095872F972F0E94B82223E333E3B4
-:103F900043E35FE30E941C230E9485226093DB01C0
-:103FA0001D1624F40E94251E8093DC018091DC0103
-:103FB00087FF05C00E94251E81958093DC011C1699
-:103FC00024F40E94251E8093DD018091DD0187FF8E
-:103FD00005C00E94251E81958093DD01DF91CF9160
-:103FE0001F910C944B1FDF91CF911F910895E9ED24
-:103FF000F1E085E0DF011D928A95E9F71092D80182
-:104000001092D7010895833081F128F4813059F05E
-:104010008230D1F00895853009F449C0B8F1863076
-:1040200009F456C0089520911501862F90E0820F63
-:10403000911D8F3F910520F4620F60931501089543
-:104040008FEF80931501089520911401862F90E041
-:10405000820F911D8F3F910520F4620F6093140130
-:1040600008958FEF80931401089520911301862FF6
-:1040700090E0820F911D8F3F910520F4620F6093B5
-:10408000130108958FEF8093130108952091120179
-:10409000862F90E0820F911D8F3F910520F4620FD3
-:1040A0006093120108958FEF80931201089520917B
-:1040B0001101862F90E0820F911D8F3F910520F412
-:1040C000620F6093110108958FEF8093110108959D
-:1040D00020911001862F90E0820F911D8F3F910556
-:1040E00020F4620F6093100108958FEF8093100108
-:1040F0000895833011F128F4813049F0823091F035
-:104100000895853081F120F18630C1F108958091C4
-:104110001501681720F4861B8093150108951092ED
-:104120001501089580911401681720F4861B80936F
-:1041300014010895109214010895809113016817D5
-:1041400020F4861B809313010895109213010895A3
-:1041500080911201681720F4861B80931201089544
-:1041600010921201089580911101681720F4861BA6
-:10417000809311010895109211010895809110010A
-:10418000681720F4861B8093100108951092100187
-:1041900008958D3109F442C020F58E3009F477C0BE
-:1041A00070F4873009F459C018F48630F1F134C046
-:1041B000883009F4A8C08B3009F4A5C02DC0863121
-:1041C00009F4A1C038F4803109F472C0813109F4D6
-:1041D00079C022C0893109F496C08B3109F44DC0F1
-:1041E0001BC0853309F487C048F4873209F483C0C3
-:1041F00008F473C0893209F47EC00EC0833438F4E9
-:104200008A3308F068C0883309F47DC005C0833460
-:1042100009F471C0883499F080E008950E943F222B
-:104220000E941F0F0E9424086EC08091CF01817FE1
-:104230008E7F8093CF0181E08093DF0108950E94FB
-:10424000A2142FEF83ED90E3215080409040E1F7DE
-:1042500000C000000E940F1C56C09091CF01892F12
-:104260008095817080FB90F919F0966098601DC070
-:10427000997F977F9093CF0146C09091CF0191FB9A
-:10428000882780F921E0822780FB91F909C090916D
-:10429000CF0192FB882780F921E0822780FB92F9E9
-:1042A0009093CF01882379F191609093CF01089585
-:1042B0009091CF0193FB882780F921E0822780FB32
-:1042C00093F9EECF0E94A21480910D0191E089270D
-:1042D00080930D0118C027EC01C023EE280F61E088
-:1042E00070E080E090E004C0660F771F881F991F80
-:1042F0002A95D2F704C061E070E080E090E00E946F
-:104300009E180E94A21481E0089580E0089580E044
-:104310000895CF93C82F8091DF01813079F018F094
-:104320008230D1F184C0A0910E01B0910F018C9127
-:10433000813169F0823209F07CC009C0A0910E0180
-:10434000B0910F018C91813111F0823249F48C2FA0
-:104350000E94852181111DC08C2F0E94C9201AC086
-:104360008C2F0E948721811114C0C43179F048F448
-:10437000CB3079F0C03109F060C082E08093DF017A
-:1043800008C0C93219F0C83321F057C01092DF01BC
-:1043900054C081E0817053C0C93289F118F5C4312D
-:1043A00071F1A8F4C73009F046C08AE08093150186
-:1043B00094E19093140193E0909313018093120180
-:1043C00088E08093110188E28093100134C0CE51BF
-:1043D000C63088F5EC2FF0E0E65DFE4F80818093DB
-:1043E000DE0129C0CE34E9F020F4CB3421F56AE0B7
-:1043F00013C0C13579F0C235F1F461E00DC0809190
-:10440000DE01882319F01092DE0115C081E080934F
-:10441000DF0115C061E006C08091DE010E9403202B
-:104420000AC06AE08091DE010E94792004C01092E7
-:10443000DF0180E004C081E002C080E0ABCFCF911B
-:104440000895E1E8F0E08081886080838081816068
-:1044500080838FB7F89493E09093890090ED9093C8
-:1044600088008FBF0895EFE6F0E08081826080834E
-:104470000895EFE6F0E080818D7F80830895EFE678
-:10448000F0E0808192E08927808308951F920F9247
-:104490000FB60F9211242F933F934F935F936F9317
-:1044A0007F938F939F93AF93BF93EF93FF938091ED
-:1044B000E0019091E10101969093E1018093E00188
-:1044C000811103C082E00E942408E091E101E69599
-:1044D000E695F0E0E657FB4FE4918091E0018E1302
-:1044E00003C080E00E942408FF91EF91BF91AF913B
-:1044F0009F918F917F916F915F914F913F912F91FC
-:104500000F900FBE0F901F90189504D06894B111B2
-:104510008DC0089570D088F09F5790F0B92F9927DB
-:10452000B751A0F0D1F0660F771F881F991F1AF0BE
-:10453000BA95C9F712C0B13081F077D0B1E00895D3
-:1045400074C0672F782F8827B85F39F0B93FCCF354
-:10455000869577956795B395D9F73EF490958095B4
-:10456000709561957F4F8F4F9F4F0895E89409C0D4
-:1045700097FB3EF490958095709561957F4F8F4F96
-:104580009F4F9923A9F0F92F96E9BB279395F695AC
-:10459000879577956795B795F111F8CFFAF4BB0F2A
-:1045A00011F460FF1BC06F5F7F4F8F4F9F4F16C08E
-:1045B000882311F096E911C0772321F09EE8872F18
-:1045C000762F05C0662371F096E8862F70E060E0D4
-:1045D0002AF09A95660F771F881FDAF7880F96954D
-:1045E000879597F9089557FD9058440F551F59F036
-:1045F0005F3F71F04795880F97FB991F61F09F3FD0
-:1046000079F087950895121613061406551FF2CFF8
-:104610004695F1DF08C0161617061806991FF1CF48
-:1046200086957105610508940895E894BB2766276F
-:104630007727CB0197F908950BD078C069D028F07F
-:104640006ED018F0952309F05AC05FC01124EECF48
-:10465000CADFA0F3959FD1F3950F50E0551F629FDD
-:10466000F001729FBB27F00DB11D639FAA27F00DCB
-:10467000B11DAA1F649F6627B00DA11D661F829FF2
-:104680002227B00DA11D621F739FB00DA11D621FD7
-:10469000839FA00D611D221F749F3327A00D611DF4
-:1046A000231F849F600D211D822F762F6A2F1124D6
-:1046B0009F5750408AF0E1F088234AF0EE0FFF1F29
-:1046C000BB1F661F771F881F91505040A9F79E3F60
-:1046D000510570F014C0AACF5F3FECF3983EDCF3B5
-:1046E000869577956795B795F795E7959F5FC1F79D
-:1046F000FE2B880F911D9695879597F9089597F948
-:104700009F6780E870E060E008959FEF80EC089577
-:1047100000240A94161617061806090608950024A0
-:104720000A9412161306140605060895092E03941A
-:10473000000C11F4882352F0BB0F40F4BF2B11F48E
-:1047400060FF04C06F5F7F4F8F4F9F4F089597FBAF
-:10475000072E16F4009407D077FD09D00E94C123DC
-:1047600007FC05D03EF4909581959F4F0895709574
-:1047700061957F4F0895EE0FFF1F0590F491E02D96
-:104780000994AA1BBB1B51E107C0AA1FBB1FA61798
-:10479000B70710F0A61BB70B881F991F5A95A9F7EA
-:1047A00080959095BC01CD010895F999FECF92BDF9
-:1047B00081BDF89A992780B50895A8E1B0E042E05C
-:1047C00050E00C94FD23262FF999FECF92BD81BDB8
-:1047D000F89A019700B4021639F01FBA20BD0FB63F
-:1047E000F894FA9AF99A0FBE08950196272F0E941D
-:1047F000E4230C94E323DC01CB01FC01F999FECF07
-:1048000006C0F2BDE1BDF89A319600B40D92415058
-:0A4810005040B8F70895F894FFCF68
-:10481A0020022608B30890085C0829080101BC0197
-:10482A0028080A03140A3F4D36394B04FE03C8030D
-:10483A008F0322033B0354036D030102030405069D
-:04484A000708090052
+:1011E00070E0CE010E948A0A8091E8008E77809399
+:1011F000E80080E1FE01A2E5B1E001900D928A9540
+:10120000E1F7DF91CF9108958091E701811109C045
+:101210000E941C0C0E94790C8091E20084608093F3
+:10122000E20008951092E7010895089508950C943E
+:10123000D01B42E061EC81E00E94960B42E061EC41
+:1012400082E00E94960B42E061EC83E00E94960BE4
+:1012500042E161EC84E00C94960B8091EA018330CA
+:1012600009F455C030F4813071F0823009F48EC039
+:1012700008958A3009F47AC08B3009F460C089304F
+:1012800009F09CC020C08091E901813A09F096C024
+:101290008091E800877F8093E8008091ED01909134
+:1012A000EE01892B21F060E080E090E003C060E176
+:1012B00082E591E070E00E94D30A8091E8008B778C
+:1012C0008093E80008958091E901813209F076C0A9
+:1012D0008091ED019091EE01009719F0039709F0CC
+:1012E0006DC08091E800877F8093E8008091E800DE
+:1012F00082FD05C08091E8018111F8CF5FC0809127
+:10130000F100809362018091E8008B7753C0809157
+:10131000E901813A09F052C08091ED019091EE010E
+:10132000892B09F04BC08091E800877F8093E8000B
+:101330008091E80080FFFCCF80910C0136C0809145
+:10134000E9018132D9F58091ED019091EE01892B6F
+:10135000A9F58091E800877F8093E8000E94CB0B7D
+:101360008091EB0180930C010C9419148091E90198
+:10137000813221F58091E800877F8093E8000E9408
+:10138000CB0B8091EC018093630108958091E9017A
+:10139000813AA1F48091E800877F8093E8008091F2
+:1013A000E80080FFFCCF809163018093F100809181
+:1013B000E8008E778093E8000C94CB0B089584B7F7
+:1013C000877F84BF88E10FB6F89480936000109205
+:1013D00060000FBE90E080E80FB6F8948093610043
+:1013E000909361000FBE0E94650F0E941C0C0E942A
+:1013F000790C8091E20084608093E20078940E94EE
+:10140000F40E0E94670F82E091E00E94110F80911C
+:10141000E801853069F40E94901B8091E6018823E1
+:10142000B1F30E94BB1B882391F30E94740AEFCF93
+:101430000E946D0FECCF292F332723303105A9F0FF
+:101440006CF42130310509F442C02230310509F035
+:1014500043C08DE690E02EE333E042C021323105F7
+:10146000C9F02232310519F137C099278130910531
+:1014700041F08230910541F0892B71F5EAE3F3E008
+:1014800005C0E2E2F3E002C0EAE0F3E0849190E01C
+:101490009F0126C0643000F5E62FF0E0EE0FFF1F3D
+:1014A000EE5DFE4F2081318189E090E019C064300B
+:1014B00098F4E62FF0E0DF01AA0FBB1FA65EBE4F37
+:1014C0002D913C91EA5EFE4F808190E009C082E15F
+:1014D00090E02BEA33E004C080E090E020E030E0D0
+:1014E000FA0131832083089580E189BD82E189BDBD
+:1014F00009B400FEFDCF8091D8008F7D8093D80085
+:101500008091E00082608093E0008091E00081FDA6
+:10151000FCCF0895CF92DF92EF92FF920F931F932B
+:10152000CF93DF937C018B01EA010E94EC0B8111C8
+:1015300031C0209731F088819981081B190BE80E82
+:10154000F91EC12CD12C0115110519F18091E8006B
+:1015500085FD14C08091E8008E778093E800209785
+:1015600041F0888199818C0D9D1D9983888385E048
+:1015700011C00E94EC0B882331F30CC0F70181915C
+:101580007F018093F10001501109FFEFCF1ADF0AAC
+:10159000DACF80E0DF91CF911F910F91FF90EF9014
+:1015A000DF90CF9008952091EF013091F001261740
+:1015B000370748F06115710539F42091E8002E775E
+:1015C0002093E80001C0B901FC0120E0611571051C
+:1015D000B9F18091E801882309F440C0853009F40D
+:1015E0003FC08091E80083FD3DC08091E80082FF0C
+:1015F00006C08091E80082FF26C080E008958091B7
+:10160000E80080FFE3CF2091F3008091F20090E0AA
+:10161000922B6115710551F08830910538F42191B4
+:101620002093F100615071090196F3CF21E00897F2
+:1016300009F020E08091E8008E778093E800C6CF23
+:101640002111C7CFD6CF8091E801882339F08530AA
+:1016500039F08091E80083FFCCCF04C082E0089588
+:1016600083E0089581E008952091EF013091F00129
+:101670002617370748F06115710539F42091E80005
+:101680002E772093E80001C0B901FC0120E061152C
+:101690007105C1F18091E801882309F441C08530CA
+:1016A00009F440C08091E80083FD3EC08091E800CD
+:1016B00082FF06C08091E80082FF27C080E0089585
+:1016C0008091E80080FFE3CF2091F3008091F20049
+:1016D00090E0922B6115710559F08830910540F426
+:1016E00024912093F1003196615071090196F2CF57
+:1016F00021E0089709F020E08091E8008E77809340
+:10170000E800C5CF2111C6CFD5CF8091E80188234D
+:1017100039F0853039F08091E80083FFCBCF04C0E9
+:1017200082E0089583E0089581E00895982F97302E
+:1017300058F59093E900981739F07091EC002091DA
+:10174000ED005091F00003C0242F762F50E021FFD0
+:1017500019C03091EB003E7F3093EB003091ED00EB
+:101760003D7F3093ED003091EB0031603093EB0022
+:101770007093EC002093ED005093F0002091EE0068
+:1017800027FF07C09F5FD3CF8F708093E90081E070
+:10179000089580E008958091E90187FD05C080915A
+:1017A000E80080FF0EC012C08091E80082FD05C0F5
+:1017B0008091E8018111F8CF08958091E8008B773E
+:1017C00008C08091E8018111EACF08958091E80076
+:1017D0008E778093E80008958091E4009091E50071
+:1017E00045E62091EC0020FF21C02091E80020FD7B
+:1017F00021C02091E801222389F0253089F0209131
+:10180000EB0025FD0FC02091E4003091E500281782
+:10181000390739F3415041F0C901E3CF82E008951F
+:1018200083E0089581E0089584E008952091E80020
+:1018300022FFDFCF80E008950E948A0C0E94920C64
+:10184000E0EEF0E0808181608083E8EDF0E080816F
+:101850008F77808319BCA7EDB0E08C918E7F8C933D
+:1018600080818F7E80831092E70108950F931F93EC
+:10187000CF93DF930E948A0C0E94920CC8EDD0E0B7
+:1018800088818F77888388818068888388818F7D2D
+:10189000888319BC1092E8011092E4011092E601CD
+:1018A0001092E50100EE10E0F80180818B7F8083CB
+:1018B00088818160888342E060E080E00E94960B2E
+:1018C000E1EEF0E080818E7F8083E2EEF0E08081C7
+:1018D00081608083808188608083F80180818E7F31
+:1018E0008083888180618883DF91CF911F910F91E0
+:1018F0000895E8EDF0E080818F7E8083E7EDF0E0F1
+:1019000080818160808384E082BF81E08093E701F1
+:101910000C94360CE8EDF0E080818E7F808310928D
+:10192000E20008951092DA001092E10008951F92EB
+:101930000F920FB60F9211242F933F934F935F9303
+:101940006F937F938F939F93AF93BF93EF93FF9387
+:101950008091E10082FF0BC08091E20082FF07C00E
+:101960008091E1008B7F8093E1000E94F30E8091D3
+:10197000DA0080FF1FC08091D80080FF1BC08091DB
+:10198000DA008E7F8093DA008091D90080FF0DC04D
+:1019900080E189BD82E189BD09B400FEFDCF81E00F
+:1019A0008093E8010E94040905C019BC1092E80167
+:1019B0000E9412098091E10080FF19C08091E2002D
+:1019C00080FF15C08091E2008E7F8093E2008091BD
+:1019D000E20080618093E2008091D8008062809371
+:1019E000D80019BC85E08093E8010E941609809117
+:1019F000E10084FF30C08091E20084FF2CC080E1D0
+:101A000089BD82E189BD09B400FEFDCF8091D80077
+:101A10008F7D8093D8008091E1008F7E8093E100DC
+:101A20008091E2008F7E8093E2008091E2008160ED
+:101A30008093E2008091E401882311F084E007C0E4
+:101A40008091E30087FF02C083E001C081E08093C2
+:101A5000E8010E9417098091E10083FF29C080916D
+:101A6000E20083FF25C08091E100877F8093E10041
+:101A700082E08093E8011092E4018091E1008E7F82
+:101A80008093E1008091E2008E7F8093E20080915C
+:101A9000E20080618093E20042E060E080E00E942A
+:101AA000960B8091F00088608093F0000E941509E9
+:101AB000FF91EF91BF91AF919F918F917F916F9126
+:101AC0005F914F913F912F910F900FBE0F901F90FC
+:101AD00018951F920F920FB60F9211242F933F93D8
+:101AE0004F935F936F937F938F939F93AF93BF9326
+:101AF000CF93EF93FF93C091E900CF708091EC00FA
+:101B00001092E9008091F000877F8093F000789434
+:101B10000E94A50D1092E9008091F00088608093EA
+:101B2000F000C093E900FF91EF91CF91BF91AF9189
+:101B30009F918F917F916F915F914F913F912F91E5
+:101B40000F900FBE0F901F9018951F93CF93DF93A8
+:101B5000CDB7DEB7AA970FB6F894DEBF0FBECDBFE4
+:101B6000E9EEF1E08091F100819321E0E13FF2079D
+:101B7000C9F70E942D098091E80083FF1CC12091C4
+:101B8000E9013091EA01832F90E08A30910508F055
+:101B900012C1FC01EA5AFF4F0C94A323203881F0B4
+:101BA000223809F008C18091ED018F708093E9001F
+:101BB0008091EB0085FB882780F91092E90006C030
+:101BC0008091E5019091E601911182609091E80089
+:101BD000977F9093E8008093F1001092F100C5C0C8
+:101BE000822F8D7F09F0E7C0222319F0223061F0A7
+:101BF000E2C08091EB01813009F0DDC0333009F0A3
+:101C000080E08093E60128C08091EB01811124C01F
+:101C10002091ED012F7009F4CEC02093E90080914E
+:101C2000EB0080FF19C08091EB00333011F480622B
+:101C300011C080618093EB0081E090E0022E01C032
+:101C4000880F0A94EAF78093EA001092EA008091E4
+:101C5000EB0088608093EB001092E9008091E8002F
+:101C6000877F86C02111A7C01091EB011F7780915B
+:101C7000E3008078812B8093E3008091E800877FE8
+:101C80008093E8000E94CB0B8091E80080FFFCCF9E
+:101C90008091E30080688093E300112311F083E0DA
+:101CA00001C082E08093E80186C02058223008F00D
+:101CB00082C08091EB019091EC018C3D23E0920772
+:101CC00079F583E08A838AE289834FB7F894DE014D
+:101CD000139620E03EE051E2E32FF0E050935700EE
+:101CE000E49120FF03C0E295EF703F5FEF708E2F0D
+:101CF00090E0EA3010F0C79601C0C0968D939D9396
+:101D00002F5F243149F74FBF8091E800877F809390
+:101D1000E8006AE270E0CE0101960E94D30A14C086
+:101D2000AE014F5F5F4F6091ED010E941B0A00976B
+:101D300009F441C02091E800277F2093E800BC010E
+:101D400089819A810E94340B8091E8008B7780937F
+:101D5000E80031C0203879F58091E800877F8093D2
+:101D6000E8008091E4018093F1008091E8008E7793
+:101D70008093E8000E94CB0B1EC021111CC09091E3
+:101D8000EB019230C0F48091E800877F8093E800F7
+:101D90009093E4010E94CB0B8091E401811104C077
+:101DA0008091E30087FF02C084E001C081E080935E
+:101DB000E8010E9419098091E80083FF0AC0809120
+:101DC000E800877F8093E8008091EB008062809339
+:101DD000EB00AA960FB6F894DEBF0FBECDBFDF9121
+:101DE000CF911F9108950895CF938091E8018823A2
+:101DF000B1F08091E9008F709091EC0090FF02C0EB
+:101E000090E801C090E0C92FC82B1092E9008091A2
+:101E1000E80083FD0E94A50DCF70C093E900CF912B
+:101E2000089590936901809368010895E091680195
+:101E3000F0916901309721F00190F081E02D099433
+:101E400080E00895E0916801F0916901309721F0F8
+:101E50000280F381E02D09940895E0916801F091EA
+:101E60006901309721F00480F581E02D09940895EF
+:101E700020916601309167018217930771F090936A
+:101E8000670180936601E0916801F09169013097E4
+:101E900021F00680F781E02D0994089520916401D6
+:101EA000309165018217930771F0909365018093DB
+:101EB0006401E0916801F0916901309721F000849C
+:101EC000F185E02D0994089508950C94640F0E9403
+:101ED000FF1B0E9430040C94C51CCF92DF92EF923E
+:101EE000FF920F931F93CF93DF93CDB7DEB72B975E
+:101EF0000FB6F894DEBF0FBECDBF0E9448043BE68C
+:101F0000E32E31E0F32E00E010E0C02E802F0E947F
+:101F10003505F701D1907F01D826B1F40F5F1F4F2F
+:101F20000E30110591F78FEF89838A831B820E94FF
+:101F3000081C8160782F9D838C8349815A816B8135
+:101F40008D810E94101041C09091D30191FF04C077
+:101F50008B870E943B058B8520E030E04D2D50E0C3
+:101F6000922FBA01022E02C0759567950A94E2F786
+:101F700060FF25C02E83CF82EE24E394F12C02C0B3
+:101F8000EE0CFF1C9A95E2F790E08E219F2121E054
+:101F9000892B09F420E028870E94081C8160782F93
+:101FA0009A8789874E815F8168858A850E94101093
+:101FB000F801E559FE4F80818E25808306C02F5F92
+:101FC0003F4F2630310561F6A9CF0E94A91F10911D
+:101FD0006A010E94160F1817A1F00E94160F809335
+:101FE0006A012B960FB6F894DEBF0FBECDBFDF910E
+:101FF000CF911F910F91FF90EF90DF90CF900C94B5
+:1020000024082B960FB6F894DEBF0FBECDBFDF912C
+:10201000CF911F910F91FF90EF90DF90CF90089597
+:10202000CF93DF93CDB7DEB72B970FB6F894DEBF13
+:102030000FBECDBF4F83588769877A878B87DE01B4
+:10204000119686E0FD0111928A95E9F785E0FE017F
+:10205000379601900D928A95E1F749815A816B81FB
+:102060007C818D819E810E94E9162B960FB6F89493
+:10207000DEBF0FBECDBFDF91CF9108950895CF93FE
+:10208000C82F882309F4C1C0823859F40E94160F62
+:1020900081FDBBC089E30E94301A0E94071B89E3BF
+:1020A0000CC0833879F40E94160F80FDAEC083E522
+:1020B0000E94301A0E94071B83E50E94701ACF917C
+:1020C0000C94071B843859F40E94160F82FD9DC0A2
+:1020D00087E40E94301A0E94071B87E4EECF8CEF42
+:1020E0008C0F813A48F48C2F0E94D52181118DC02C
+:1020F0008C2F0E94301AE3CF80E28C0F883048F496
+:10210000C77081E001C0880FCA95EAF70E94B41A2F
+:10211000D6CF8BE58C0F833078F4C53A29F0C63AD8
+:1021200031F482E890E005C081E890E002C083E8E5
+:1021300090E0CF910C94380F88E58C0F833108F034
+:1021400064C0C83A39F1C93A41F1CA3A49F1CB3AC7
+:1021500051F1CC3A59F1CD3A61F1C03B69F1CE3A37
+:1021600071F1CF3A79F1C13B81F1C23B89F1C33BB7
+:1021700091F1C43B99F1C53BA1F1C63BA9F1C73B25
+:10218000B1F1C83BB9F1C93BC1F1CA3BC9F58AE21B
+:1021900092E038C082EE90E035C089EE90E032C027
+:1021A0008AEE90E02FC085EB90E02CC086EB90E0AB
+:1021B00029C087EB90E026C08CEC90E023C08DEC2A
+:1021C00090E020C083E891E01DC08AE891E01AC049
+:1021D00082E991E017C084E991E014C081E292E0C5
+:1021E00011C083E292E00EC084E292E00BC085E26F
+:1021F00092E008C086E292E005C087E292E002C069
+:1022000080E090E0CF910C944E0FCF9108958823F9
+:1022100009F44BC0823859F40E94160F81FF45C063
+:1022200089E30E94301A0E94071B89E30CC083389F
+:1022300071F40E94160F80FF38C083E50E94301AA7
+:102240000E94071B83E50E94701A0C94071B8438B8
+:1022500059F40E94160F82FF28C087E40E94301AAA
+:102260000E94071B87E4EFCF9CEF980F913A58F339
+:1022700090E2980F983050F4877091E001C0990F68
+:102280008A95EAF7892F0E94BA1ADFCF9BE5980F4B
+:10229000933020F480E090E00C94380F885A83311A
+:1022A00020F480E090E00C944E0F0895882321F0F4
+:1022B0000E94B41A0C94071B0895882321F00E94F1
+:1022C000BA1A0C94071B08958F929F92AF92BF92F7
+:1022D000CF92DF92EF92FF920F931F93CF93DF93F2
+:1022E00000D000D01F92CDB7DEB77C0185E0F701AA
+:1022F000DE01119601900D928A95E1F7F701D080E9
+:1023000011810281B580B2942FE0B2222381348101
+:10231000232B39F01F3F39F481E0FFEFDF1203C0B8
+:1023200003C081E001C080E080FD5DC20E94CB1946
+:10233000882319F082E00E940E1AC7010E943E1005
+:10234000D9821A8369817A81802F0E949119182F6E
+:10235000C92E0E9445190E94181801110E94D11A15
+:102360000E94291A882379F0002369F080E2810F06
+:10237000883048F082E00E940E1A0E94291ADD245B
+:10238000D394D82601C0D12CEC2DE295EF70F0E06B
+:10239000E05AFF4F0C94A3238C2D807F9C2D9F70BF
+:1023A000B92E882319F0B29490EFB922002389F056
+:1023B000BB2009F4DAC180E2810F883020F48B2D34
+:1023C0000E94B41A03C08B2D0E94C41A0E94071BDE
+:1023D000CCC1812F0E940711BB2009F4E0C1105E1F
+:1023E0008B2D183018F40E94BA1A02C00E94CA1A23
+:1023F0000E94071BD4C18C2D807F9C2D9F70A92E1D
+:10240000803219F0A29480EFA822112319F0113024
+:1024100049F132C0002391F0BB2091F181E0B81264
+:1024200004C08A2D0E94E41ABAC192E0B91228C0F1
+:102430000E94ED1A8A2D0E94981922C0BB2079F0C3
+:10244000E1E0BE1208C00E94B11A8A2109F4A7C1B6
+:102450000E949B1904C0F2E0BF1609F4A0C10E94BB
+:10246000ED1A12C0002329F081E08B1508F497C102
+:1024700007C0B11094C108C0002321F0B11075C18C
+:102480008A2DEFC0B11078C18A2DF1C02C2D269570
+:102490002695237030E02115310521F021303105DA
+:1024A00061F07DC1002321F0812F9C2D937002C02B
+:1024B00080E090E00E94380F72C1002321F0812F4C
+:1024C0009C2D937002C080E090E00E944E0F67C187
+:1024D000812F002319F00E94B11E02C00E94191F13
+:1024E0000E949E1F5CC18C2D837009F04FC00111AA
+:1024F00056C1212F229526952770220F220F812F5A
+:102500008F70882E912CA12CB12C022E04C0880C27
+:10251000991CAA1CBB1C0A94D2F714FF10C06FE0D0
+:1025200070E080E090E004C0660F771F881F991F5D
+:102530002A95D2F7609570958095909503C060E0DC
+:1025400070E0CB012C2D269526952370422F50E06C
+:102550004230510569F04330510589F068297929E5
+:102560008A299B294130510571F00E943D1817C1FD
+:10257000682979298A299B290E94571810C10E942D
+:102580003D18C501B4010E94231809C1002319F0A8
+:102590008C2D817001C08695882309F400C1212FFC
+:1025A000229526952770220F220F812F8F70882E5B
+:1025B000912CA12CB12C022E04C0880C991CAA1CB1
+:1025C000BB1C0A94D2F714FF10C06FE070E080E0EB
+:1025D00090E004C0660F771F881F991F2A95D2F7D5
+:1025E000609570958095909503C060E070E0CB0198
+:1025F0002C2D269526952370422F50E04230510510
+:1026000069F04330510589F0682979298A299B2985
+:102610004130510571F00E941119C1C06829792912
+:102620008A299B290E942B19BAC00E941119C50141
+:10263000B4010E94F718B3C0412F50E0FA01E05EE8
+:10264000F109E531F10508F08BC0E059FF4F0C941A
+:10265000A3231F708C2D8F71002331F00E949018DE
+:10266000812F0E9456119BC00E94B118812F0E9499
+:102670005D1195C0002339F0B11091C08C2D8F7180
+:102680000E94D6188CC091E09B1508F488C0F6CF44
+:10269000002339F08C2D8F710E94901880C0002388
+:1026A000C9F38C2D8F710E94B11879C0002329F0D5
+:1026B0008C2D8F710E947B1872C00E9471186FC0A0
+:1026C0000023C9F00E9495190E94BA1A0E94C719E6
+:1026D000843029F40E94071A8C2D8F7171C0E1E0BB
+:1026E000EB1508F480C01C2D1F71812F0E949018DB
+:1026F00063E0812F0EC00E9495190E94B41AF1E088
+:10270000FB15D0F40E94071A0E949B1964E08C2DDF
+:102710008F710F900F900F900F900F90DF91CF91CE
+:102720001F910F91FF90EF90DF90CF90BF90AF90EF
+:102730009F908F900C94F71981E00F900F900F905D
+:102740000F900F90DF91CF911F910F91FF90EF901D
+:10275000DF90CF90BF90AF909F908F900C940E1A07
+:10276000002339F0BB2009F495CF812F0E943F1040
+:1027700016C0BB2009F495CF812F0E9407110FC00E
+:102780004C2D4F70612FC7010E94A2020E94961724
+:1027900006C04C2D4F70612FC7010E943C05DD2003
+:1027A00011F10E94C71980FD1EC0F70112820E941C
+:1027B000C1190E949018C7010E9464110E94C1199A
+:1027C0000F900F900F900F900F90DF91CF911F916E
+:1027D0000F91FF90EF90DF90CF90BF90AF909F90C0
+:1027E0008F900C94B1180F900F900F900F900F9046
+:1027F000DF91CF911F910F91FF90EF90DF90CF90DD
+:10280000BF90AF909F908F9008950E94D11A0E9420
+:10281000E11A0E94A31A0E94071B0E944A200E94EC
+:102820009E1F80E090E00E94380F80E090E00C94C2
+:102830004E0F0E94C11A0C9405140E948619292F6C
+:1028400022952F7030E02C3031054CF42A303105C0
+:102850006CF42250310922303105B0F407C02C301D
+:10286000310571F02F30310559F00EC0803F31F045
+:1028700018F4803E48F402C0843F31F481E00895AA
+:1028800093FB882780F9089580E00895CF93DF9324
+:1028900000D000D01F92CDB7DEB70F900F900F90F1
+:1028A0000F900F90DF91CF910895CF93DF9300D0D9
+:1028B00000D000D0CDB7DEB726960FB6F894DEBFB5
+:1028C0000FBECDBFDF91CF9108951F93CF93DF93BC
+:1028D000C091790116E080917A01C81799F0D0E093
+:1028E0001C9FF0011D9FF00D1124E558FE4F408103
+:1028F000518162817381848195810E945514219652
+:10290000C770E9CFDF91CF911F9108954091AB013E
+:102910005091AC016091AD017091AE018091AF0119
+:102920009091B0010C945514CF938091B001829591
+:102930008F7009F05FC08091AD01882309F45AC0FF
+:1029400020917901A0917A016091AB017091AC0165
+:102950008091AE019091AF0131E06F3F09F030E01E
+:10296000B32FC6E02A1709F445C0009721F07F3F36
+:1029700021F44B2F03C041E001C040E030E040FDB6
+:1029800035C0C29FF001C39FF00D1124E558FE4FE2
+:10299000418174132BC04081641328C042814111CE
+:1029A00025C0438154814817590710F441505109FB
+:1029B000481B590B483C5105C8F48091B0018F70F9
+:1029C00080618093B00186E0829FF001839FF00DCB
+:1029D0001124E058FE4F80818F70806180838BEAE4
+:1029E00091E00E946411CF910C9465142F5F3F4FCA
+:1029F0002770B8CFCF910895CF92DF92EF92FF92D8
+:102A00000F931F93CF93DF93CDB7DEB762970FB6C7
+:102A1000F894DEBF0FBECDBF8C0185E0F801DE016A
+:102A20001D9601900D928A95E1F7D8014C9111966F
+:102A30005C91119712966C9112971396ED90FC9001
+:102A400014977091AB01E091AC012091AE013091EF
+:102A5000AF012115310531F0EF3F31F481E07F3FC7
+:102A600019F403C081E001C080E0B82FB170CB2E13
+:102A700080FD6CC1D090AD01DD2009F4F5C0F0916E
+:102A8000B001E216F30638F0C701821B930B883CB5
+:102A9000910548F09BC0209530952E0D3F1D283C98
+:102AA000310508F093C08F2F807F09F052C0E513E5
+:102AB00014C0741312C0D62E61110FC0FF70F061E4
+:102AC000F093B0010E9486148BEA91E00E94641199
+:102AD0008091B001F80185836CC1EF2831F05F3F30
+:102AE00031F481E04F3F19F403C081E001C080E080
+:102AF00080FD03C081E0862701C080E0F82FF170DF
+:102B0000FF2E80FF1CC08091790120917A0136E070
+:102B1000821709F428C190E0389FF001399FF00D29
+:102B20001124E558FE4F7181571306C07081471379
+:102B300003C07281671303C001968770E9CFD62E58
+:102B4000662309F436C18091B00181608093B001A1
+:102B500053C0E51308C0741306C0611104C0D80146
+:102B60001596FC93AEC04D875E878D859E856A8BDA
+:102B70000E941D146A89882329F1D62E662311F13B
+:102B80002091B001822F82958F7090E002970CF413
+:102B900060C08091AB019091AC0198878F831986BA
+:102BA000FB86EA862C87CE01079651C0E51731F1E6
+:102BB0004D875E878D859E856A8B0E941D146A896C
+:102BC00081112EC0C8010E946411A4C08F2F807F84
+:102BD00069F77E2DF98AE88A89890E9446148BEA72
+:102BE00091E00E946411EBEAF1E086E0DF011D92C2
+:102BF0008A95E9F70E948614D12CDBC07413D8CFD4
+:102C00006111D6CFD8011596FC93C8010E946411BA
+:102C1000EBEAF1E086E0DF011D928A95E9F7C9C091
+:102C2000D62E662379F22091B001822F82958F7083
+:102C300090E0029774F08091AB019091AC019A837F
+:102C400089831B82FD82EC822E83CE0101960E9435
+:102C5000641186E0F801ABEAB1E001900D928A952B
+:102C6000E1F70E9494146FC0E216F30628F0C70142
+:102C7000821B930B9C0104C0209530952E0D3F1DA7
+:102C8000283C310508F052C0D62E662309F49ACFAD
+:102C9000E5132CC074132AC08091B00180FD1DC0C3
+:102CA000982F92959F70C9F0D80115968C9315971F
+:102CB0009F3039F09F5F9295907F8F70892B15968A
+:102CC0008C93C8010E94641186E0F801ABEAB1E080
+:102CD00001900D928A95E1F736C086E0F801ABEAE3
+:102CE000B1E001900D928A95E1F763C04D875E8750
+:102CF0008D859E850E941D14882379F086E0F80159
+:102D0000ABEAB1E001900D928A95E1F70E9494142C
+:102D10000E948614DD24D3944CC08091B001816060
+:102D20008093B001C8010E94641143C07E2DF98ACE
+:102D3000E88A89890E944614EBEAF1E086E0DF0127
+:102D40001D928A95E9F70E94861433C0662309F420
+:102D500039CF4D875E878D859E850E941D148823FF
+:102D600009F430CFCBCF4D875E878D859E850E943D
+:102D70008619292F22952F7030E0223031052CF44E
+:102D80009F7041F0811106C00CC0243031052CF435
+:102D90009F7049F4805E883020F0C8010E94641161
+:102DA000CF2CDC2C06C0D80115969C91907F91F712
+:102DB000F8CF8D2D62960FB6F894DEBF0FBECDBF53
+:102DC000DF91CF911F910F91FF90EF90DF90CF9007
+:102DD00008951F93CF93DF93CDB7DEB72C970FB62F
+:102DE000F894DEBF0FBECDBF4F83588769877A87BF
+:102DF0008B879C87CE0107960E94FC148823C1F024
+:102E00002F8138858A859B85892B31F03F3F11F0D2
+:102E100080E003C02F3FE1F781E0811147C04F817F
+:102E2000588569857A858B859C850E9455143EC09E
+:102E300086E0FE013796DE01119601900D928A958B
+:102E4000E1F7FF81E8854A855B854115510531F041
+:102E5000EF3F31F481E0FF3F19F403C081E001C08E
+:102E600080E080FD23C020917A0130E0C901019605
+:102E7000877099276091790170E086179707F1F1C3
+:102E8000F983EA835D834C8396E0929FD001939F00
+:102E9000B00D1124A558BE4FFE01319601900D9240
+:102EA0009A95E1F780937A010E94651416E080916B
+:102EB000790190917A01891779F1189FC001112445
+:102EC00085589E4F0E94FC14882331F1E0917901CE
+:102ED0001E9FF0011124E558FE4F4081518162810F
+:102EE0007381848195810E9455148091790190E0CD
+:102EF00001968770992780937901D9CF0E94191480
+:102F000010927A0110927901EBEAF1E086E0DF019C
+:102F10001D928A95E9F7CACF2C960FB6F894DEBFBA
+:102F20000FBECDBFDF91CF911F910895EF92FF9219
+:102F30000F931F93CF93DF939C01009709F471C007
+:102F4000F12CEE24E394E9012196F9018491843770
+:102F500040F4843008F056C0813081F0823021F195
+:102F600060C0853709F449C0C0F19CE7980F9037DD
+:102F700008F057C08F770E94071146C089010E5F85
+:102F80001F4FFE01849190E2980F983050F48770A3
+:102F9000FE2D01C0FF0F8A95EAF78F2F0E94D41AE9
+:102FA00015C00E943F1014C089010E5F1F4FFE0123
+:102FB000849190E2980F983068F48770FE2D01C0DC
+:102FC000FF0F8A95EAF78F2F0E94DA1A0E94071BDB
+:102FD000E8011AC00E940711FBCF2E5F3F4FFE0190
+:102FE000C491CC2341F08FE99FE00197F1F700C035
+:102FF0000000C150F6CFE90107C0FE01F490E901DD
+:10300000229602C00E943F108F2D882341F0EFE9E5
+:10301000FFE03197F1F700C000008150F6CF9E012C
+:1030200092CFDF91CF911F910F91FF90EF90089574
+:1030300008956093B5017093B6018093B7019093A2
+:10304000B8010C9405140F931F930091B5011091D2
+:10305000B6012091B7013091B801062B172B282B10
+:10306000392B0093B5011093B6012093B70130932B
+:10307000B8011F910F910C9405140F931F930091A9
+:10308000B5011091B6012091B7013091B801062326
+:103090001723282339230093B5011093B6012093F9
+:1030A000B7013093B8011F910F910C9405140F9341
+:1030B0001F930091B5011091B6012091B701309195
+:1030C000B80106271727282739270093B501109341
+:1030D000B6012093B7013093B8011F910F910C9462
+:1030E00005141092B1011092B2011092B301109226
+:1030F000B4010C94051441E050E060E070E004C0BD
+:10310000440F551F661F771F8A95D2F74093B10170
+:103110005093B2016093B3017093B4010C94051401
+:1031200041E050E060E070E004C0440F551F661FAE
+:10313000771F8A95D2F78091B1019091B201A09149
+:10314000B301B091B401842B952BA62BB72B8093A0
+:10315000B1019093B201A093B301B093B4010C9468
+:10316000051441E050E060E070E004C0440F551FDA
+:10317000661F771F8A95D2F7409550956095709598
+:103180008091B1019091B201A091B301B091B401CD
+:1031900084239523A623B7238093B1019093B20192
+:1031A000A093B301B093B4010C94051441E050E036
+:1031B00060E070E004C0440F551F661F771F8A95BA
+:1031C000D2F78091B1019091B201A091B301B09179
+:1031D000B40184279527A627B7278093B101909340
+:1031E000B201A093B301B093B4010C9405140F93F2
+:1031F0001F930091B1011091B2012091B301309160
+:10320000B401062B172B282B392B0093B1011093F7
+:10321000B2012093B3013093B4011F910F910C942C
+:1032200005140F931F930091B1011091B2012091E9
+:10323000B3013091B40106231723282339230093C7
+:10324000B1011093B2012093B3013093B4011F91E7
+:103250000F910C9405140F931F930091B1011091DD
+:10326000B2012091B3013091B40106271727282716
+:1032700039270093B1011093B2012093B301309329
+:10328000B4011F910F910C9405140895CF92DF9211
+:10329000EF92FF920F931F93CF93DF93EC01C090B7
+:1032A000B501D090B601E090B701F090B8018091DF
+:1032B000B1019091B201A091B301B091B401C82ABB
+:1032C000D92AEA2AFB2A0FE110E0B701A601002E55
+:1032D00004C076956795579547950A94D2F740FDB7
+:1032E00005C00150110988F780E007C0BE01802F9A
+:1032F0000E9489070197A9F3802FDF91CF911F9139
+:103300000F91FF90EF90DF90CF900895CF93DF93D0
+:10331000EC010E944619BE010E948907DF91CF91FE
+:103320000895CB010E94861908958091BE010895E9
+:103330008093BE0108951092BE0108950E94081C5A
+:103340002091BC013091BD018217930750F00E947B
+:10335000081C2091BC013091BD01821B930B9C0184
+:103360000AC00E94081C2091BC013091BD0120952B
+:103370003095280F391F81E0283B3B4008F480E05E
+:1033800008958091BB0185958595859508958091D7
+:10339000BB01877008950E94081C2091B9013091EB
+:1033A000BA018217930768F00E94081C2091B901A6
+:1033B0003091BA01821B930B883B9B4078F480E0EC
+:1033C00014C00E94081C2091B9013091BA012095C7
+:1033D0003095280F391F283B3B4088F38091BB0173
+:1033E00082FB882780F991E089278170089598E011
+:1033F000899F90011124622B6093BB010E94901859
+:103400000E94081C9093BA018093B901089510920C
+:10341000BB011092BA011092B90108954091BB010D
+:10342000809584238093BB01982F977089F450E096
+:10343000282F332727FD30954217530749F08595EC
+:10344000859585950E94B1181092BA011092B90124
+:1034500008959091BB01977081E009F480E0089590
+:1034600090910C019923D9F090910D019923B9F015
+:10347000982F9695969596959F3088F5E0910E0138
+:10348000F0910F01E90FF11D877021E030E001C0DC
+:10349000220F8A95EAF78181822B818308954091DA
+:1034A0000E0150910F0120E030E09FEFFA01E20F92
+:1034B000F31F6281681799F09F3F19F4611101C0F1
+:1034C000922F2F5F3F4F2E30310581F79F3F39F00C
+:1034D000FA01E90FF11D97FDFA9582830895089589
+:1034E00090910C019923E1F090910D019923C1F085
+:1034F000982F9695969596959F3020F5E0910E0120
+:10350000F0910F01E90FF11D877021E030E001C05B
+:10351000220F8A95EAF72095818128232183089537
+:1035200040910E0150910F0120E030E0FA01E20FCE
+:10353000F31F9281981301C012822F5F3F4F2E30EC
+:103540003105A1F7089581E090E0E0910E01F0913E
+:103550000F01E80FF91F1082019680319105A9F73C
+:1035600008958091D20108959091D201982B909363
+:10357000D201089580959091D20198239093D20121
+:1035800008951092D20108959091D101982B9093B3
+:10359000D101089580959091D10198239093D10104
+:1035A00008951092D10108959091D001982B909395
+:1035B000D001089580959091D00198239093D001E7
+:1035C00008951092D00108958093BF010E94081CB5
+:1035D0009093BD018093BC0108951092BF01109299
+:1035E000BD011092BC01089540910E0150910F0150
+:1035F00020E030E080E0FA01E20FF31F91819111A9
+:103600008F5F2F5F3F4F2F303105A9F70895E0916D
+:103610000E01F0910F018091D2018083E0910E01A3
+:10362000F0910F0180819091D101892B8083E091ED
+:103630000E01F0910F0180819091D001892B808340
+:103640008091BF01882399F00E949E1981110E94E8
+:10365000ED1AE0910E01F0910F0180819091BF0170
+:10366000892B80830E94F41A81110E94ED1A8091A7
+:103670000E0190910F010C94220FCF92DF92EF92E6
+:10368000FF920F931F936C01EE24FF24C114D10409
+:10369000E104F10421F46B017C0180E001C080E1D0
+:1036A00033272F2D1E2D0D2D011511052105310557
+:1036B00019F0885F6801790197018601A4E03695C9
+:1036C000279517950795AA95D1F70115110521059D
+:1036D000310519F08C5F6801790197018601F2E0EC
+:1036E0003695279517950795FA95D1F70115110588
+:1036F0002105310519F08E5F68017901B701A60136
+:103700007695679557954795452B462B472B09F09E
+:103710008F5F1F910F91FF90EF90DF90CF900895F2
+:103720008091E801843021F11092D40120E488E1F5
+:1037300090E00FB6F894A895809360000FBE209398
+:10374000600080E00E94240883B7817F846083BF8B
+:1037500083B7816083BF7894889583B78E7F83BF5A
+:1037600088E10FB6F89480936000109260000FBE5D
+:10377000089508950895CF930E94B91B0E944804AC
+:103780000E94BA1BC0E08C2F0E943505811105C034
+:10379000CF5FCE30C1F780E001C081E0CF910895C6
+:1037A0000E9419140E94160F0C9424081F920F9265
+:1037B0000FB60F9211248F939F93AF93BF93809175
+:1037C000D401811113C08091D5019091D601A091AF
+:1037D000D701B091D8014196A11DB11D8093D501AB
+:1037E0009093D601A093D701B093D801BF91AF9128
+:1037F0009F918F910F900FBE0F901F90189582E0B0
+:1038000084BD93E095BD9AEF97BD80936E000895B7
+:103810002FB7F8948091D5019091D601A091D7014E
+:10382000B091D8012FBF0895CF92DF92EF92FF920F
+:103830000F931F932FB7F8944091D5015091D60163
+:103840006091D7017091D8012FBF6A017B01EE24EE
+:10385000FF248C0120E030E0C016D106E206F3061A
+:1038600010F441505109481B590BCA011F910F9187
+:10387000FF90EF90DF90CF9008951F920F920FB6B8
+:103880000F9211248F939F93AF93BF938091D50193
+:103890009091D601A091D701B091D8010196A11DB8
+:1038A000B11D8093D5019093D601A093D701B09319
+:1038B000D801BF91AF919F918F910F900FBE0F9044
+:1038C0001F9018950E941C0CF8942FEF87EA91E640
+:1038D000215080409040E1F700C0000087E090EB6D
+:1038E000DC018093F2019093F301A093F401B09373
+:1038F000F5012CE088E190E00FB6F894A89580934C
+:1039000060000FBE20936000FFCFEF92FF920F93F5
+:103910001F93CF93DF93E82EF12C8F2D0E94350556
+:10392000C0E0D0E0082F10E098010C2E02C03595C1
+:1039300027950A94E2F720FD05C02196C630D105EF
+:1039400099F709C06C2F7F2D80E00E943D05E81299
+:10395000F4CF81E005C0F3948EE0F812DECF80E072
+:10396000DF91CF911F910F91FF90EF900895CF932A
+:10397000C82F8CE20E94851C882321F08C2FCF91C8
+:103980000C94851C80E0CF910895CF930E940A1E6D
+:10399000811102C00E94F01DC5E6C15049F00E948D
+:1039A00048048FE39CE90197F1F700C00000F5CFD0
+:1039B00089E20E94B71C811111C18AE20E94B71CE2
+:1039C00081110E94F01D85E00E94B71C81110E94A8
+:1039D000621C0E94151E8093D30187E00E94B71CD1
+:1039E000882399F18BE10E94B71C882351F09091B4
+:1039F000D30191FB882780F921E0822780FB91F990
+:103A000022C08EE00E94B71C882351F09091D30110
+:103A100092FB882780F921E0822780FB92F913C06E
+:103A200080E10E94B71C9091D301882341F093FB61
+:103A3000882780F921E0822780FB93F904C0892F31
+:103A4000809580FB90F99093D3018091D3010E94DF
+:103A5000191E0E94271E8093F10180EE0E94B71C60
+:103A6000882341F08091F101982F909590FB80F987
+:103A70008093F10189E30E94B71C882359F090914B
+:103A8000F10191FB882780F921E0822780FB91F9E1
+:103A90009093F10182EE0E94B71C882359F0909117
+:103AA000F10192FB882780F921E0822780FB92F9BF
+:103AB0009093F10186EE0E94B71C882359F09091F3
+:103AC000F10193FB882780F921E0822780FB93F99D
+:103AD0009093F10183EE0E94B71C882359F09091D6
+:103AE000F10194FB882780F921E0822780FB94F97B
+:103AF0009093F10185E30E94B71C882359F09091BF
+:103B0000F10195FB882780F921E0822780FB95F958
+:103B10009093F10181E30E94B71C882359F09091A2
+:103B2000F10196FB882780F921E0822780FB96F936
+:103B30009093F10181E10E94B71C882359F0909184
+:103B4000F10197FB882780F921E0822780FB97F914
+:103B50009093F1018091F1010E942B1E8091F1015F
+:103B600087FB882780F980930D0187E20E94B71CAC
+:103B7000C82F8EE10E94B71C8111C2608FE10E94A4
+:103B8000B71C8111C46080E20E94B71C8111C8601B
+:103B900081E20E94B71C8111C06182E20E94B71CC1
+:103BA0008111C06283E20E94B71C8111C06484E26B
+:103BB0000E94B71C882311F0C06802C0CC2329F0F2
+:103BC0008C2F0E94221E6C2F03C00E941E1E682F85
+:103BD00070E080E090E0CF910C941918CF91089597
+:103BE0006DEE7EEF80E090E00E94DD2360E082E0F9
+:103BF00090E00E94CB2360E083E090E00E94CB2322
+:103C000060E084E090E00E94CB2360E085E090E0FB
+:103C10000C94CB2380E090E00E94C52321E08D3EF0
+:103C20009E4F09F020E0822F089582E090E00C94EE
+:103C3000BD23682F82E090E00C94CB2383E090E0DA
+:103C40000C94BD23682F83E090E00C94CB2384E098
+:103C500090E00C94BD23682F84E090E00C94CB237B
+:103C60008091DB0180FF0BC06091130185E0689FAC
+:103C7000B001112475956795759567952AC081FFE8
+:103C800009C06091130185E0689FB001112475950A
+:103C900067951FC082FF07C06091130185E0689F90
+:103CA000B001112416C04091DC014423C9F0609199
+:103CB0001201461788F72091130185E0289F900193
+:103CC0001124429FC001439F900D112470E00E9477
+:103CD0008F236038710540F46115710539F002C019
+:103CE00065E070E0862F08958FE7089581E00895DC
+:103CF0008091DB0180FF08C06091110170E0759533
+:103D000067957595679521C081FF06C06091110187
+:103D100070E07595679519C082FF04C0609111012C
+:103D200070E010C08091DC018823C1F06091100127
+:103D30008617A0F790911101989FC001112470E09F
+:103D40000E948F236038710528F46115710521F0F8
+:103D5000862F08958FE7089581E0089561E070E06F
+:103D6000F4CF803F21F40E94301E819504C0813F32
+:103D700029F40E94301E8093DF010895823F21F4D0
+:103D80000E94301E819504C0833F29F40E94301E9A
+:103D90008093DE010895893F19F40E94781E05C0C2
+:103DA0008A3F31F40E94781E81958093E001089546
+:103DB0008B3F21F40E94781E819504C08C3F29F42A
+:103DC0000E94781E8093E1010895843F21F4809140
+:103DD000DD01816017C0853F21F48091DD018260A3
+:103DE00011C0863F21F48091DD0184600BC0873FC4
+:103DF00021F48091DD01886005C0883F31F4809115
+:103E0000DD0180618093DD0108958D3F21F4809173
+:103E1000DB0181600BC08E3F21F48091DB01826069
+:103E200005C08F3F29F48091DB0184608093DB0122
+:103E30000895803F39F48091DF0187FF6CC01092B4
+:103E4000DF0169C0813F29F48091DF011816BCF3BE
+:103E500062C09091DE01823F29F497FF5CC010920E
+:103E6000DE0159C0833F19F41916CCF354C0893FC1
+:103E700041F48091E00118160CF04DC01092E00161
+:103E80004AC08A3F29F48091E00187FF44C0F6CF01
+:103E90008B3F39F48091E10187FF3DC01092E10131
+:103EA0003AC08C3F29F48091E1011816BCF333C06D
+:103EB000843F21F48091DD018E7F17C0853F21F47E
+:103EC0008091DD018D7F11C0863F21F48091DD015D
+:103ED0008B7F0BC0873F21F48091DD01877F05C078
+:103EE000883F31F48091DD018F7E8093DD0113C026
+:103EF0008D3F21F48091DB018E7F0BC08E3F21F43A
+:103F00008091DB018D7F05C08F3F29F48091DB011B
+:103F10008B7F8093DB018091DE0181110EC0809147
+:103F2000DF0181110AC08091E001811106C08091FA
+:103F3000E101811102C01092DC0108958DED91E044
+:103F40000E942D0F0E94081C9093DA018093D901E2
+:103F500008951F93CF93DF938091D9019091DA0157
+:103F60000E94141C4091DC01442321F02091140193
+:103F700030E006C0209115015AE0259F90011124E0
+:103F80008217930708F482C08091DE011091DF014F
+:103F9000D091E001C091E101811107C0111105C06C
+:103FA000D11103C0CC2309F471C04F3F19F04F5F0A
+:103FB0004093DC01181624F40E94301E8093DE0129
+:103FC0008091DE0187FF05C00E94301E819580939D
+:103FD000DE01111624F40E94301E8093DF018091CF
+:103FE000DF0187FF05C00E94301E81958093DF01AD
+:103FF0006091DE01662339F11091DF01112319F17F
+:10400000772767FD7095872F972F0E94A02223E3C3
+:1040100033E343E35FE30E9404230E946D22609335
+:10402000DE01612F772767FD7095872F972F0E94FC
+:10403000A02223E333E343E35FE30E9404230E94CF
+:104040006D226093DF011D1624F40E94781E809378
+:10405000E0018091E00187FF05C00E94781E8195F4
+:104060008093E0011C1624F40E94781E8093E101E5
+:104070008091E10187FF05C00E94781E81958093A1
+:10408000E101DF91CF911F910C949E1FDF91CF91A1
+:104090001F910895EDEDF1E085E0DF011D928A9515
+:1040A000E9F71092DC011092DB010895833081F171
+:1040B00028F4813059F08230D1F00895853009F428
+:1040C00049C0B8F1863009F456C008952091150111
+:1040D000862F90E0820F911D8F3F910520F4620F93
+:1040E0006093150108958FEF809315010895209135
+:1040F0001401862F90E0820F911D8F3F910520F4CF
+:10410000620F6093140108958FEF80931401089556
+:1041100020911301862F90E0820F911D8F3F910512
+:1041200020F4620F6093130108958FEF80931301C1
+:10413000089520911201862F90E0820F911D8F3FEC
+:10414000910520F4620F6093120108958FEF809320
+:104150001201089520911101862F90E0820F911D88
+:104160008F3F910520F4620F6093110108958FEF46
+:1041700080931101089520911001862F90E0820F05
+:10418000911D8F3F910520F4620F609310010895F7
+:104190008FEF809310010895833011F128F481305E
+:1041A00049F0823091F00895853081F120F1863018
+:1041B000C1F1089580911501681720F4861B809342
+:1041C0001501089510921501089580911401681742
+:1041D00020F4861B80931401089510921401089511
+:1041E00080911301681720F4861B809313010895B2
+:1041F00010921301089580911201681720F4861B14
+:104200008093120108951092120108958091110176
+:10421000681720F4861B80931101089510921101F4
+:10422000089580911001681720F4861B8093100177
+:1042300008951092100108958B3109F46AC008F5B1
+:104240008E3009F470C070F4873009F452C018F44D
+:104250008630B9F134C0883009F4A1C08B3009F43C
+:104260009EC02DC0813109F479C020F4803109F459
+:1042700064C025C0863109F492C0893109F48FC029
+:104280001EC0853309F483C060F4873209F47FC00F
+:1042900020F48E3108F06DC012C0893209F477C065
+:1042A0000EC0833438F48A3308F061C0883309F4CF
+:1042B00076C005C0833409F46AC0883461F080E0B8
+:1042C00008958091D301817F8E7F8093D30181E017
+:1042D0008093E30108950E9419142FEF83ED90E37A
+:1042E000215080409040E1F700C000000E94621C15
+:1042F00056C09091D301892F8095817080FB90F9F1
+:1043000019F09660986027C0997F977F9093D301AA
+:1043100046C09091D30191FB882780F921E0822744
+:1043200080FB91F913C09091D30192FB882780F90B
+:1043300021E0822780FB92F909C09091D30193FB81
+:10434000882780F921E0822780FB93F99093D3019D
+:10435000882329F191609093D30108950E94191444
+:1043600080910D0191E0892780930D0118C027EC01
+:1043700001C023EE280F61E070E080E090E004C00F
+:10438000660F771F881F991F2A95D2F704C061E036
+:1043900070E080E090E00E9419180E94191481E0FA
+:1043A000089580E0089580E00895CF93C82F80910C
+:1043B000E301813079F018F08230D1F184C0A0910E
+:1043C0000E01B0910F018C91813169F0823209F0B8
+:1043D0007CC009C0A0910E01B0910F018C91813178
+:1043E00011F0823249F48C2F0E94D12181111DC01D
+:1043F0008C2F0E941C211AC08C2F0E94D321811166
+:1044000014C0C43179F048F4CB3079F0C03109F0F0
+:1044100060C082E08093E30108C0C93219F0C8335C
+:1044200021F057C01092E30154C081E0817053C065
+:10443000C93289F118F5C43171F1A8F4C73009F017
+:1044400046C08AE08093150194E19093140193E0B3
+:10445000909313018093120188E08093110188E208
+:104460008093100134C0CE51C63088F5EC2FF0E0B7
+:10447000E65DFE4F80818093E20129C0CE34E9F0F1
+:1044800020F4CB3421F56AE013C0C13579F0C23590
+:10449000F1F461E00DC08091E201882319F01092DF
+:1044A000E20115C081E08093E30115C061E006C020
+:1044B0008091E2010E9456200AC06AE08091E201E8
+:1044C0000E94CC2004C01092E30180E004C081E08F
+:1044D00002C080E0ABCFCF91089504D06894B111B1
+:1044E0008DC0089570D088F09F5790F0B92F99270C
+:1044F000B751A0F0D1F0660F771F881F991F1AF0EF
+:10450000BA95C9F712C0B13081F077D0B1E0089503
+:1045100074C0672F782F8827B85F39F0B93FCCF384
+:10452000869577956795B395D9F73EF490958095E4
+:10453000709561957F4F8F4F9F4F0895E89409C004
+:1045400097FB3EF490958095709561957F4F8F4FC6
+:104550009F4F9923A9F0F92F96E9BB279395F695DC
+:10456000879577956795B795F111F8CFFAF4BB0F5A
+:1045700011F460FF1BC06F5F7F4F8F4F9F4F16C0BE
+:10458000882311F096E911C0772321F09EE8872F48
+:10459000762F05C0662371F096E8862F70E060E004
+:1045A0002AF09A95660F771F881FDAF7880F96957D
+:1045B000879597F9089557FD9058440F551F59F066
+:1045C0005F3F71F04795880F97FB991F61F09F3F00
+:1045D00079F087950895121613061406551FF2CF29
+:1045E0004695F1DF08C0161617061806991FF1CF79
+:1045F00086957105610508940895E894BB276627A0
+:104600007727CB0197F908950BD078C069D028F0AF
+:104610006ED018F0952309F05AC05FC01124EECF78
+:10462000CADFA0F3959FD1F3950F50E0551F629F0D
+:10463000F001729FBB27F00DB11D639FAA27F00DFB
+:10464000B11DAA1F649F6627B00DA11D661F829F22
+:104650002227B00DA11D621F739FB00DA11D621F07
+:10466000839FA00D611D221F749F3327A00D611D24
+:10467000231F849F600D211D822F762F6A2F112406
+:104680009F5750408AF0E1F088234AF0EE0FFF1F59
+:10469000BB1F661F771F881F91505040A9F79E3F90
+:1046A000510570F014C0AACF5F3FECF3983EDCF3E5
+:1046B000869577956795B795F795E7959F5FC1F7CD
+:1046C000FE2B880F911D9695879597F9089597F978
+:1046D0009F6780E870E060E008959FEF80EC0895A8
+:1046E00000240A94161617061806090608950024D1
+:1046F0000A9412161306140605060895092E03944B
+:10470000000C11F4882352F0BB0F40F4BF2B11F4BE
+:1047100060FF04C06F5F7F4F8F4F9F4F089597FBDF
+:10472000072E16F4009407D077FD09D00E94A92324
+:1047300007FC05D03EF4909581959F4F08957095A4
+:1047400061957F4F0895EE0FFF1F0590F491E02DC6
+:104750000994AA1BBB1B51E107C0AA1FBB1FA617C8
+:10476000B70710F0A61BB70B881F991F5A95A9F71A
+:1047700080959095BC01CD010895F999FECF92BD29
+:1047800081BDF89A992780B50895A8E1B0E042E08C
+:1047900050E00C94E523262FF999FECF92BD81BD00
+:1047A000F89A019700B4021639F01FBA20BD0FB66F
+:1047B000F894FA9AF99A0FBE08950196272F0E944D
+:1047C000CC230C94CB23DC01CB01FC01F999FECF67
+:1047D00006C0F2BDE1BDF89A319600B40D92415089
+:0A47E0005040B8F70895F894FFCF99
+:1047EA0020022608B30890085C0829080101C001C4
+:1047FA0028080A03140A3F4D363979042C04F603B3
+:10480A00BD035003690382039B03010203040506E7
+:04481A000708090082
:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c
index bf5a974bf..f4e4f92e0 100644
--- a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* |LShift/(|Z/Ctrl| X | C | V | B | [ | | ] | N | M | , | . |//Ctrl|RShift/)|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | - |
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | -/L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | LGui | | Alt |Ctrl/Esc|
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), RSFTC,
- KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_MINS,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_MINS),
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,LT(SYMB, KC_TAB), KC_ENT
@@ -59,13 +59,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | 1 | 2 | 3 | 4 | | | | | | % | = | @ | | F12 |
+ * | | | | | | | | | | | | | | | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | 5 | 6 | 7 | 8 | 9 |------| |------| & | _ | - | ; | + | |
+ * | | 1 | 2 | 3 | 4 | 5 |------| |------| & | _ | - | ; | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | ( | ) | [ | ] | 0 | | | | | | ( | ) | | | |
+ * | | 6 | 7 | 8 | 9 | 0 | | | | | | @ | = | % | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | | | | | | | | |
+ * | | | |NxtTab|PrvTab| | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@@ -79,19 +79,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SYMB] = KEYMAP(
// left hand
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_9,
- KC_TRNS, KC_LPRN,KC_RPRN,KC_LBRC, KC_RBRC, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
- KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_TRNS, KC_TRNS, KC_PERC,KC_EQL, KC_AT, KC_TRNS, KC_F12,
- KC_AMPR, KC_UNDS,KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
- KC_TRNS, KC_PIPE, KC_LPRN,KC_RPRN, KC_3, KC_TRNS, KC_TRNS,
- KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
+ KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, 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
@@ -101,13 +101,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | MsUp | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * | | PgUp | Home | End | PgDn | |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * | | | | | | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@@ -120,10 +120,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_TRNS, 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_PGUP, KC_HOME, KC_END, KC_PGDN, 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,
@@ -140,7 +140,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
+ [2] = ACTION_MACRO_TAP(0), // Eric Tang's Famous Macro!
+ [3] = ACTION_MACRO_TAP(1) // Eric Tang's Famous Macro!
};
static uint16_t key_timer;
@@ -148,33 +150,46 @@ static uint16_t key_timer;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
- case 0: {
- if (record->event.pressed) {
- key_timer = timer_read(); // if the key is being pressed, we start the timer.
- register_code(KC_LSFT); // we're now holding down Shift.
- } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
- if (timer_elapsed(key_timer) < 70) { // the threshhold we pick for counting something as a tap.
- register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren
- unregister_code(KC_9); // now let's let go of that key
- }
- unregister_code(KC_LSFT); // let's release the Shift key now.
- }
- break;
- }
- case 1: {
- if (record->event.pressed) {
- key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key
- register_code(KC_RSFT);
- } else {
- if (timer_elapsed(key_timer) < 70) {
- register_code(KC_0);
- unregister_code(KC_0);
- }
- unregister_code(KC_RSFT);
- }
- break;
+ case 0:
+ if (record->event.pressed) {
+ register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count && !record->tap.interrupted) {
+ register_code(KC_9);
+ }
+ else {
+ record->tap.count = 0;
+ }
+ }
+ else {
+ if (record->tap.count) {
+ unregister_code(KC_9);
+ }
+ else {
+ }
+ unregister_mods(MOD_BIT(KC_LSFT));
+ }
+ break;
+
+ case 1:
+ if (record->event.pressed) {
+ register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count && !record->tap.interrupted) {
+ register_code(KC_0);
+ }
+ else {
+ record->tap.count = 0;
+ }
+ }
+ else {
+ if (record->tap.count) {
+ unregister_code(KC_0);
+ }
+ else {
+ }
+ unregister_mods(MOD_BIT(KC_LSFT));
+ }
+ break;
}
- }
return MACRO_NONE;
};
diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk b/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk
new file mode 100644
index 000000000..4c3a314ed
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk
@@ -0,0 +1,5 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md b/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md
index 205280e29..a9c572390 100644
--- a/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md
+++ b/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md
@@ -4,6 +4,14 @@ This is my personal layout which I use to test out ideas which may or may not ma
Changelog:
+## May 8, 2016:
+
+* Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held
+* Tweaked the positions of the numbers on the symbol layer. Basically, 12345 are now directly under their number-row counterparts in layer 0. You can imagine pulling the number row down to the home row. And 67890 are directly under 12345 - so it's a matter of just adding 5 and going to the next row (1+5 = 6, 2+5 = 7 and so on).
+* Tweaks media/nav layer
+ * Removes mouse control, as I don't use it
+ * Makes left home row keys PgUp, Home, End, PgDn
+
## Apr 29, 2016:
* Tweaks the Hyper and Meh key to send brackets when tapped
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
index efd67addd..18939b192 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
@@ -4,380 +4,175 @@
#include "action_layer.h"
#include "action_util.h"
-#define BASE 0 // default layer
-#define LOCK 1 // shift-lock layer
-#define SYMB_SH 2 // symbols shift layer
-#define SYMB_LK 3 // symbols lock layer
-#define SYMB_UN 4 // symbols unlock layer
-#define MDIA_SH 5 // media shift layer
-#define MDIA_LK 6 // media lock layer
-#define MDIA_UN 7 // media unlock layer
-#define UNLOCK 8 // clear to base layer
+#define BASE 0 // default layer
+#define SYMB 1 // symbols layer
+#define MDIA 2 // media layer
+#define SPEC 3 // special layer
+
+#define LCaps 10 // left caps-shift key
+#define LSymb 11 // left symbol-shift key
+#define LMdia 12 // left media-shift key
+#define LSpec 13 // left special-shift key
+#define RCaps 14 // right caps-shift key
+#define RSymb 15 // right symbol-shift key
+#define RMdia 16 // right media-shift key
+#define RSpec 17 // right special-shift key
+
+#define MUL 20 // mouse up left
+#define MUR 21 // mouse up right
+#define MDL 22 // mouse down left
+#define MDR 23 // mouse down right
/*
- * The Ordinary Layout for the Ergodox EZ keyboard, v3.1
- * modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+ * The Ordinary Layout for the Ergodox EZ keyboard, v4
+ *
+ * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+ *
+ * No rights reserved. This software is in the public domain.
+ * Credit me if you are friendly but if you're a jerk don't bother.
+ *
* Details: readme.md
* https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Base Layer
- *
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ Media |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | ' Symbol |
- * |-----------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+-----------|
- * | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
- * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
- * `-----------------------------------' `-----------------------------------'
- * ,-------------. ,-------------.
- * | Home | End | | Left | Right|
- * ,------|------|------| |------+------+------.
- * | | | PgUp | | Up | | |
- * |Backsp| Del |------| |------| Enter| Space|
- * | | | PgDn | | Down | | |
- * `--------------------' `--------------------'
- */
-[BASE] = KEYMAP(
-// left hand
- LT(LOCK, KC_GRV) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
-,LT(MDIA_SH, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
-,MO(SYMB_SH) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
-,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
-,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
-
- ,KC_HOME,KC_END
- ,KC_PGUP
- ,KC_BSPC,KC_DEL ,KC_PGDN
-
- // right hand
- ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL)
- ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_SH, KC_BSLS)
- ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_SH, KC_QUOT)
- ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
- ,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
-
- ,KC_LEFT ,KC_RGHT
- ,KC_UP
- ,KC_DOWN ,KC_ENT ,KC_SPC
- ),
-
-/* Keymap 1: Layer Lock Keys
- *
- * ,-------------------------------------------------------. ,-------------------------------------------------------.
- * | | Esc | | | | | | | | | | | | Bspc | |
- * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------|
- * | Media LOCK | | | | | | | | | | | | | | Media LOCK |
- * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
- * | Symbol LOCK | | | | | |------| |------| | | | | | Symbol LOCK |
- * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
- * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
- * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------'
- * | | | | | | | | | | | |
- * `------------------------------------' `------------------------------------'
- * ,-------------. ,-------------.
- * | | | | | |
- * ,------|------|------| |------+------+------.
- * | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
- * `--------------------' `--------------------'
- */
-[LOCK] = KEYMAP(
-// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_CAPS ,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
-
- // right hand
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ),
-
-/* Keymap 2: Symbol Shift Layer
- *
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
- * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
- * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
- * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
- * | | | | | | | 0 | . | = | + | Entr |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | Left | Right| | Home | End |
- * ,------|------|------| |------+------+------.
- * | | | Up | | PgUp | | |
- * |Space |Enter |------| |------|BackSp| Del |
- * | | | Down | | PgDn | | |
- * `--------------------' `--------------------'
- */
-[SYMB_SH] = KEYMAP(
-// left hand
- KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
-,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
-,MO(SYMB_SH) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
-,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_LEFT ,KC_RGHT
- ,KC_UP
- ,KC_SPC ,KC_ENT ,KC_DOWN
- // right hand
- ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
- ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
- ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_SH)
- ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
- ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
- ,KC_HOME ,KC_END
- ,KC_PGUP
- ,KC_PGDN ,KC_BSPC ,KC_DEL
-),
-
-/* Keymap 3: Symbol Lock Layer
- *
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
- * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
- * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
- * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
- * | | | | | | | 0 | . | = | + | Entr |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | Left | Right| | Home | End |
- * ,------|------|------| |------+------+------.
- * | | | Up | | PgUp | | |
- * |Space |Enter |------| |------|BackSp| Del |
- * | | | Down | | PgDn | | |
- * `--------------------' `--------------------'
- */
-[SYMB_LK] = KEYMAP(
-// left hand
- MO(SYMB_UN) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
-,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
-,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
-,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_LEFT ,KC_RGHT
- ,KC_UP
- ,KC_SPC ,KC_ENT ,KC_DOWN
- // right hand
- ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_UN)
- ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
- ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK)
- ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
- ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
- ,KC_HOME ,KC_END
- ,KC_PGUP
- ,KC_PGDN ,KC_BSPC ,KC_DEL
- ),
-
-/* Keymap 4: Symbol Unlock Layer
+/******* Base Layer ********************************************************************************************************
*
* ,------------------------------------------------------. ,------------------------------------------------------.
- * | | Esc | | | | | | | | | | | | Bspc | |
+ * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special |
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
- * | Media LOCK | | | | | | | | | | | | | | Media LOCK |
+ * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
- * | UNLOCK | | | | | |------| |------| | | | | | UNLOCK |
- * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
- * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
+ * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol |
+ * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
+ * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
- * | | | | | | | | | | | |
- * `----------------------------------' `----------------------------------'
+ * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
+ * `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
- * | | | | | |
+ * | Home | End | | Left | Right|
* ,------|------|------| |------+------+------.
- * | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
+ * | | | PgUp | | Up | | |
+ * |Backsp| Del |------| |------| Enter| Space|
+ * | | | PgDn | | Down | | |
* `--------------------' `--------------------'
*/
-[SYMB_UN] = KEYMAP(
+[BASE] = KEYMAP(
// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,TG(MDIA_LK) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_CAPS ,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
- // right hand
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_LK)
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
-),
+ F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC
+,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
+,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
+,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
+,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
+ ,KC_HOME,KC_END
+ ,KC_PGUP
+ ,KC_BSPC,KC_DEL ,KC_PGDN
+ // right hand
+ ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
+ ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
+ ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb)
+ ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps)
+ ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL
+ ,KC_LEFT ,KC_RGHT
+ ,KC_UP
+ ,KC_DOWN ,KC_ENT ,KC_SPC
+ ),
-/* Keymap 5: Media Shift Layer
+/******* Symbols Layer *****************************************************************************************************
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
+ * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Symbol | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| Symbol |
+ * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
+ * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
+ * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
+ * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
- * `----------------------------------' `----------------------------------'
+ * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent|
+ * `-----------------------------------' `-------------------------------------'
* ,-------------. ,-------------.
- * | Stop |Refrsh| | Prev | Next |
+ * | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
- * |Brwser|Brwser|Search| |VolUp | | |
- * |Back | Fwd |------| |------| Stop | Play-|
- * | | | Home | |VolDn | | Pause|
+ * | | | Up | | PgUp | | |
+ * |Space |Enter |------| |------|BackSp| Del |
+ * | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
-[MDIA_SH] = KEYMAP(
+[SYMB] = KEYMAP(
// left hand
- KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
-,MO(MDIA_SH) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
-,MO(SYMB_SH) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
-,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
-,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
- ,KC_WSTP ,KC_WREF
- ,KC_WSCH
- ,KC_WBAK ,KC_NO ,KC_WHOM
+ KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC
+,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,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_TAB
+,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI
+ ,KC_LEFT ,KC_RGHT
+ ,KC_UP
+ ,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
- ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
- ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_SH)
- ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_SH)
- ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
- ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
- ,KC_MPRV ,KC_MNXT
- ,KC_VOLU
- ,KC_VOLD ,KC_MSTP ,KC_MPLY
+ ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS
+ ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS
+ ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS
+ ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS
+ ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
+ ,KC_HOME ,KC_END
+ ,KC_PGUP
+ ,KC_PGDN ,KC_BSPC ,KC_DEL
),
-/* Keymap 6: Media Lock Layer
+/******* Media Layer *******************************************************************************************************
*
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
- * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | Stop |Refrsh| | Prev | Next |
- * ,------|------|------| |------+------+------.
- * |Brwser|Brwser|Search| |VolUp | | |
- * |Back | Fwd |------| |------| Stop | Play-|
- * | | | Home | |VolDn | | Pause|
- * `--------------------' `--------------------'
+ * ,---------------------------------------------------------------. ,---------------------------------------------------------------.
+ * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | |
+ * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
+ * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
+ * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
+ * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
+ * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
+ * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | |
+ * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
+ * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl|
+ * `---------------------------------------------' `---------------------------------------------'
+ * ,-------------. ,-------------.
+ * | Stop |Refrsh| | Prev | Next |
+ * ,------|------|------| |------+------+------.
+ * |Brwser|Brwser|Search| |VolUp | | |
+ * |Back | Fwd |------| |------| Stop | Play-|
+ * | | | Home | |VolDn | | Pause|
+ * `--------------------' `--------------------'
*/
-[MDIA_LK] = KEYMAP(
+[MDIA] = KEYMAP(
// left hand
- MO(MDIA_UN),KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
-,MO(UNLOCK) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
-,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
-,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
-,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
- ,KC_WSTP ,KC_WREF
- ,KC_WSCH
- ,KC_WBAK ,KC_NO ,KC_WHOM
+ KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC
+,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
+,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
+,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2
+ ,KC_WSTP ,KC_WREF
+ ,KC_WSCH
+ ,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
- ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_UN)
- ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK)
- ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO
- ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
- ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
+ ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS
+ ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS
+ ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS
+ ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS
+ ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
- ),
-
-/* Keymap 7: Media Unlock Layer
- *
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | Esc | | | | | | | | | | | | Bspc | |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | UNLOCK | | | | | | | | | | | | | | UNLOCK |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | | | | |------| |------| | | | | | |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
- * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | | | | | | | | | |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | | | | | |
- * ,------|------|------| |------+------+------.
- * | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
- * `--------------------' `--------------------'
- */
-[MDIA_UN] = KEYMAP(
-// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN1 ,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_CAPS ,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
-
- // right hand
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
- ,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_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ),
+),
-/* Keymap 8: Unlock Layer
+/******* Special Layer *****************************************************************************************************
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | UNLOCK | | | | | | | | | | | | | | UNLOCK |
+ * | | Esc | | | | | | | | | | | | Bspc | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | | | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
@@ -389,9 +184,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-[UNLOCK] = KEYMAP(
+[SPEC] = KEYMAP(
// left hand
- KC_FN1 ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ KC_TRNS ,KC_ESC ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
@@ -399,39 +194,231 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,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_FN1
- ,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_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
+ // right hand
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,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_TRNS ,KC_RSFT
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
)
};
const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
- ,[2] = ACTION_LAYER_INVERT(SYMB_LK, ON_PRESS) // FN2 - toggle to Symbols on press
- ,[3] = ACTION_LAYER_INVERT(MDIA_LK, ON_PRESS) // FN3 - toggle to Media on press
+ // the faux shift keys are implemented as macro taps
+ [LCaps] = ACTION_MACRO_TAP(LCaps)
+ ,[LSymb] = ACTION_MACRO_TAP(LSymb)
+ ,[LMdia] = ACTION_MACRO_TAP(LMdia)
+ ,[LSpec] = ACTION_MACRO_TAP(LSpec)
+ ,[RCaps] = ACTION_MACRO_TAP(RCaps)
+ ,[RSymb] = ACTION_MACRO_TAP(RSymb)
+ ,[RMdia] = ACTION_MACRO_TAP(RMdia)
+ ,[RSpec] = ACTION_MACRO_TAP(RSpec)
};
+uint16_t caps_shift = 0;
+uint16_t symb_shift = 0;
+uint16_t mdia_shift = 0;
+
+bool symb_lock = false;
+bool mdia_lock = false;
+
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:
+ switch(id) {
+ // There are two shift keys for each layer so we increment a layer_shift var when one
+ // is pressed and decrement when one is released. If both are pressed at the same time
+ // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
+ // only because sometimes rapid pressing led to irregular events; this way the states
+ // are self healing during use.
+
+ case LCaps: // both caps-shift keys trigger Left Shift
+ case RCaps: // so they don't interfere with the magic combo
+ if (record->event.pressed && !record->tap.count) {
+ if(++caps_shift > 2) caps_shift = 2;
+ if(caps_shift == 2) {
+ register_code(KC_CAPS);
+ unregister_code(KC_CAPS);
+ } else if(caps_shift == 1) {
+ register_code(KC_LSFT);
+ }
+ } else {
+ if(--caps_shift < 0) caps_shift = 0;
+ if(caps_shift == 0) unregister_code(KC_LSFT);
+ }
+ break;
+
+ case LSymb:
+ if (record->event.pressed) {
+ if(++symb_shift > 2) symb_shift = 2;
+ if(symb_shift == 2) {
+ symb_lock = !symb_lock;
+ } else if(symb_shift == 1) {
+ layer_on(SYMB);
+ }
+ } else {
+ if(--symb_shift < 0) symb_shift = 0;
+ if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB);
+ }
+ break;
+
+ case LMdia:
+ if (record->event.pressed) {
+ if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+ register_code(KC_TAB);
+ } else {
+ if(++mdia_shift > 2) mdia_shift = 2;
+ if(mdia_shift == 2) {
+ mdia_lock = !mdia_lock;
+ } else if(mdia_shift == 1) {
+ layer_on(MDIA);
+ }
+ }
+ } else {
+ if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+ unregister_code(KC_TAB);
+ } else {
+ if(--mdia_shift < 0) mdia_shift = 0;
+ if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+ }
+ }
+ break;
+
+ case LSpec:
+ if (record->event.pressed) {
+ if (record->tap.count && !record->tap.interrupted) {
+ register_code(KC_GRV);
+ } else {
+ layer_on(SPEC);
+ }
+ } else {
+ if(record->tap.count && !record->tap.interrupted) {
+ unregister_code(KC_GRV);
+ } else {
+ layer_off(SPEC);
+ }
+ }
+ break;
+
+ case RSymb:
+ if (record->event.pressed) {
+ if (record->tap.count && (!symb_shift) && (!symb_lock)) {
+ register_code(KC_QUOT);
+ } else {
+ if(++symb_shift > 2) symb_shift = 2;
+ if(symb_shift == 2) {
+ symb_lock = !symb_lock;
+ } else if(symb_shift == 1) {
+ layer_on(SYMB);
+ }
+ }
+ } else {
+ if(record->tap.count && symb_shift == 0) {
+ unregister_code(KC_QUOT);
+ } else {
+ if(--symb_shift < 0) symb_shift = 0;
+ if((!symb_shift) && (!symb_lock)) layer_off(SYMB);
+ }
+ }
+ break;
+
+ case RMdia:
+ if (record->event.pressed) {
+ if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+ register_code(KC_BSLS);
+ } else {
+ if(++mdia_shift > 2) mdia_shift = 2;
+ if(mdia_shift == 2) {
+ mdia_lock = !mdia_lock;
+ } else if(mdia_shift == 1) {
+ layer_on(MDIA);
+ }
+ }
+ } else {
+ if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+ unregister_code(KC_BSLS);
+ } else {
+ if(--mdia_shift < 0) mdia_shift = 0;
+ if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+ }
+ }
+ break;
+
+ case RSpec:
+ if (record->event.pressed) {
+ if (record->tap.count && !record->tap.interrupted) {
+ register_code(KC_EQL);
+ } else {
+ layer_on(SPEC);
+ }
+ } else {
+ if(record->tap.count && !record->tap.interrupted) {
+ unregister_code(KC_EQL);
+ } else {
+ layer_off(SPEC);
+ }
+ }
+ break;
+
+ // mouse diagonals
+
+ case MUL: // mouse up left
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ mousekey_send();
+ }
+ break;
+
+ case MUR: // mouse up right
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ mousekey_send();
+ }
+ break;
+
+ case MDL: // mouse down left
if (record->event.pressed) {
- register_code(KC_RSFT);
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ mousekey_send();
} else {
- unregister_code(KC_RSFT);
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ mousekey_send();
}
break;
- }
+
+ case MDR: // mouse down right
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ mousekey_send();
+ }
+ break;
+
+ default:
+ // none
+ break;
+ }
+
return MACRO_NONE;
};
@@ -442,31 +429,22 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
-
// shift or caps lock turns on red light
- if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
+ if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
ergodox_right_led_1_on();
} else {
ergodox_right_led_1_off();
}
- // do not change lights while locking and unlocking
- if(layer == LOCK || layer == SYMB_UN || layer == MDIA_UN || layer == UNLOCK) {
- return;
- }
-
- //ergodox_board_led_off();
-
- // symbol turns on green light
- if(layer == SYMB_SH || layer == SYMB_LK) {
+ // Symbol layer turns on green light
+ if(layer_state & (1UL<<SYMB)) {
ergodox_right_led_2_on();
} else {
ergodox_right_led_2_off();
}
- // media turns on blue light
- if(layer == MDIA_SH || layer == MDIA_LK) {
+ // Media layer turns on blue light
+ if(layer_state & (1UL<<MDIA)) {
ergodox_right_led_3_on();
} else {
ergodox_right_led_3_off();
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.png
index 69af8df4e..9c561a10a 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 04792f2df..25731ea2e 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-base.txt
@@ -1,7 +1,7 @@
[{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:"#2277ff",w:1.5},"Shift\n\n~\n\n\n\nLock\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nShift\n\n\n\n=\nLock"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc"},"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"],
@@ -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",fa:[0,1,0,1,0,0,0],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5,f:3},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\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/ordinary-media.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
index 0ae162431..99e5ed80b 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
index cc4c877eb..4eccc9f35 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
@@ -1,22 +1,22 @@
[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
-[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F16"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
-[{y:-0.875,x:2.5},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
-[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#e6e067",a:4},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#cccccc",a:7,w:1.5},""],
-[{y:-0.625,x:6.5,c:"#ffb063",a:4,h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#ffb063",a:4},"End",{x:1},"Page\n\n\n\n\n\nDown"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#cccccc",a:7},""],
-[{y:-0.875,c:"#2277ff",a:4,f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#ffb063"},"Delete\n\n\nOption"],
-[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
+[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""],
+[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"],
+[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.png
new file mode 100644
index 000000000..6eecf447e
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.txt
new file mode 100644
index 000000000..a08827c6d
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-special.txt
@@ -0,0 +1,27 @@
+[{x:3.5,a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
+[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
+[{y:-0.375,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
+[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""],
+[{y:-0.75,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"],
+[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],
+[{h:2},"",{h:2},"",""],
+[{x:2},""],
+[{r:-30,rx:13,y:-1,x:-3},"",""],
+[{x:-3},"",{h:2},"",{h:2},""],
+[{x:-3},""]
+
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
index b3101e5c0..e4de64a96 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
index 35efdba7d..e199f5c59 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
@@ -1,7 +1,7 @@
[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
@@ -14,7 +14,7 @@
[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
-[{y:-0.875,c:"#2277ff",fa:[0,1,0,1,0,0,1],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"],
[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"],
[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"],
@@ -22,6 +22,6 @@
[{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
-[{x:-3,f:3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
-[{x:-3,f:3},"Page\n\n\n\n\n\nDown"]
+[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
+[{x:-3},"Page\n\n\n\n\n\nDown"]
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
index 8e2d5ce26..1e740e4f3 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
@@ -1,1190 +1,1202 @@
-:100000000C945F040C94A3040C94A3040C94A30418
-:100010000C94A3040C94A3040C94A3040C94A304C4
-:100020000C94A3040C94A3040C94C40D0C94960E8D
-:100030000C94A3040C94A3040C94A3040C94A304A4
-:100040000C94A3040C9441230C94A3040C94A304D7
-:100050000C94A3040C94E31C0C94A3040C94A3042C
-:100060000C94A3040C94A3040C94A3040C94A30474
-:100070000C94A3040C94A3040C94A3040C94A30464
-:100080000C94A3040C94A3040C94A3040C94A30454
-:100090000C94A3040C94A3040C94A3040C94A30444
-:1000A0000C94A3040C94A3040C94A304FB0E1D0F46
-:1000B00008101D0F08105F0F820F0810D70FEA0FEE
-:1000C000DE12DE120C130C134E138A138A158A15D6
-:1000D000A2138A159914991464158A158A1578152E
-:1000E000000000810889248935812B850252E100B6
-:1000F000E00000001E00140004001D0000774E0008
-:100100001F001A0016001B00007F4C002000080092
-:1001100007000600E2002A0021001500090019006E
-:10012000E3004B00220017000A00050000004A000F
-:1001300029002F0000002B0200004D002D00300090
-:1001400000002B000000500023001C000B001100D9
-:1001500000004F00240018000D001000E7005200BE
-:1001600025000C000E003600E6002C0026001200D0
-:100170000F003700007F28002700130033003800ED
-:10018000007751002E8131853482E500E4000000C3
-:100190000100C300C2003900010000002900010075
-:1001A0000100010001000100010001000100010047
-:1001B0000100010001000100010001000100010037
-:1001C0000100010001000100010001000100010027
-:1001D0000100010000000100010001000000010019
-:1001E000000001000100010000000100000001000A
-:1001F00001000100010001000000010001000100F8
-:1002000001000100010001000100010001000100E6
-:1002100001000100010001000100010001000100D6
-:100220002A00010001000100010001000100C300DB
-:10023000C200390001000000C20005520252E10074
-:10024000010000003A001E022002220201005100BB
-:100250003B001F0221022302010028003C002F0264
-:1002600026022F0001002C003D0030022702300042
-:10027000010052003E00240235003502000050000B
-:100280000100360200002B0000004F002D00370255
-:1002900000002B0200004A003F003102380031000C
-:1002A00000004D004000240021001E0027784B0074
-:1002B0004100250022001F0037744C004200260038
-:1002C000230020002E7F2A004300380025022D0045
-:1002D0002E774E00C20005520252E5002871000040
-:1002E000045205520852E100010000003A001E02CB
-:1002F00020022202010051003B001F0221022302C2
-:10030000010028003C002F0226022F0001002C00D3
-:100310003D00300227023000010052003E0024025E
-:1003200035003502000050000100360200002B00AD
-:1003300000004F002D00370200002B0200004A0091
-:100340003F0031023800310000004D004000240021
-:1003500021001E0027784B004100250022001F00CD
-:1003600037744C0042002600230020002E7F2A0014
-:100370004300380025022D002E774E00045205520E
-:100380000852E5002871000001000654C100390040
-:10039000010000002900010001000100010001002E
-:1003A0000100010001000100010001000100010045
-:1003B0000100010001000100010001000100010035
-:1003C0000100010001000100010001000000010026
-:1003D0000100010000000100000001000100010017
-:1003E0000000010000000100010001000100010007
-:1003F00000000100010001000100010001000100F6
-:1004000001000100010001000100010001000100E4
-:1004100001000100010001002A00010001000100AB
-:100420000100010001000654C10039000100000074
-:10043000C30005520252E100E000000044006600E3
-:10044000A60000000077B5004500F400F2000000AF
-:10045000007F00006800F000F100F100E200B6004B
-:100460006900F500F3000000E300B4006A00A90091
-:10047000AA00A8000000B8000000F9000000FA007F
-:100480000000B9000000F9000000FA000000AC0014
-:100490006B004600530000000000AB006C004A00F7
-:1004A00050004D004978A9006D00520051005100E4
-:1004B0004C74AE006E004B004F004E00007FAD004C
-:1004C0006F00B100B30000000077AA00C30005521E
-:1004D0000252E500E4000000075208520000E1006B
-:1004E000E000000044006600A60000000077B500B0
-:1004F0004500F400F2000000007F00006800F000FA
-:10050000F100F100E200B6006900F500F300000020
-:10051000E300B4006A00A900AA00A8000000B80027
-:100520000000F9000000FA000000B9000000F90026
-:100530000000FA000000AC006B0046005300000011
-:100540000000AB006C004A0050004D004978A90043
-:100550006D005200510051004C74AE006E004B0013
-:100560004F004E00007FAD006F00B100B3000000EF
-:100570000077AA00075208520000E500E4000000DE
-:100580000100C10001003900010000002900010044
-:100590000100010001000100010001000100010053
-:1005A0000100010001000100010001000100010043
-:1005B0000100010001000100010001000100010033
-:1005C0000100010000000100010001000000010025
-:1005D0000000010001000100000001000000010016
-:1005E0000100010001000100000001000100010004
-:1005F00001000100010001000100010001000100F3
-:1006000001000100010001000100010001000100E2
-:100610002A00010001000100010001000100C100E9
-:100620000100390001000000C100010001000100CB
-:10063000010000002900010001000100010001008B
-:1006400001000100010001000100010001000100A2
-:100650000100010001000100010001000100010092
-:100660000100010001000100010001000000010083
-:100670000100010000000100000001000100010074
-:100680000000010000000100010001000100010064
-:100690000000010001000100010001000100010053
-:1006A0000100010001000100010001000100010042
-:1006B0000100010001000100010001000100010032
-:1006C00001000100C1000100010001000100000063
-:1006D00016034500720067006F0044006F00780049
-:1006E000200045005A000000160345007200670014
-:1006F0006F0044006F007800200045005A000000A1
-:100700000403090409026D00040100A0FA090400B1
-:10071000000103010100092111010001223F00072E
-:1007200005810308000A0904010001030102000910
-:100730002111010001224D000705820308000A096A
-:10074000040200010300000009211101000122360A
-:10075000000705830308000A0904030001030000E1
-:10076000000921110100012239000705840310004E
-:10077000011201100100000008EDFE071301000145
-:1007800002000105010906A101050719E029E71585
-:1007900000250195087501810205081901290595B3
-:1007A000057501910295017503910105071900294D
-:1007B0007715002501957875018102C00501098032
-:1007C000A101850216010026B7001A01002AB70010
-:1007D000751095018100C0050C0901A10185031662
-:1007E0000100269C021A01002A9C027510950181C5
-:1007F00000C005010902A1010901A10005091901B3
-:1008000029051500250195057501810295017503DE
-:1008100081010501093009311581257F950275088F
-:10082000810609381581257F950175088106050C1B
-:100830000A38021581257F950175088106C0C0051B
-:10084000010906A101050719E029E7150025019511
-:1008500008750181029501750881010508190129B2
-:10086000059505750191029501750391010507191B
-:100870000029FF150025FF950675088100C00000BE
-:10088000000000000000000000010204060A0F172B
-:10089000202C3A4A5D71879DB3C7DAE9F5FCFFFC6D
-:1008A000F5E9DAC7B39D87715D4A3A2C20170F0A24
-:1008B00006040201000000000000000000001124F6
-:1008C0001FBECFEFDAE0DEBFCDBF04B603FE24C00B
-:1008D0008091EF019091F001A091F101B091F201AE
-:1008E0008730904BA740B04BB9F41092EF011092B3
-:1008F000F0011092F1011092F20114BE84B7877FCB
-:1009000084BF88E10FB6F894809360001092600075
-:100910000FBEE0E0FFE3099511E0A0E0B1E0E6E002
-:10092000FAE402C005900D92A433B107D9F721E093
-:10093000A4E3B1E001C01D92AF3EB207E1F70E940F
-:100940000A0B0C9401250C94000061110BC0FC01F2
-:100950008281882321F085EE0E946B1103C085EE11
-:100960000E94331280E090E008950895CF93609143
-:10097000B1017091B2018091B3019091B4010E94D4
-:100980000F1CC82FE0910E01F0910F01808182723F
-:1009900019F0259A2D9A06C00E94431081FDF9CFC7
-:1009A00025982D98C130B9F0C430A9F089EF8C0F8B
-:1009B000823088F08EEF8C0F823018F4269A2E9AAF
-:1009C00002C026982E98C550C23018F4279A2F9A44
-:1009D00002C027982F98CF9108950C94B60456988A
-:1009E0005E9825982D9826982E9827982F988FEF07
-:1009F00090E0909389008093880090938B0080937F
-:100A00008A0090938D0080938C00259A2D9A2FEF69
-:100A100080E792E0215080409040E1F700C0000064
-:100A2000269A2E9A2FEF80E792E021508040904046
-:100A3000E1F700C00000279A2F9A2FEF80E792E09D
-:100A4000215080409040E1F700C0000025982D988B
-:100A50002FEF80E792E0215080409040E1F700C006
-:100A6000000026982E982FEF80E792E021508040DA
-:100A70009040E1F700C0000027982F9856985E98A4
-:100A800025982D9826982E9827982F98089589EACA
-:100A90008093800089E08093810024982C983F986F
-:100AA0008AB18F748AB96E98479A8BB1806B8BB973
-:100AB000769A0E94EF040C94B50480E280930001C2
-:100AC0008091340181110EC00E94AC0581E08093B9
-:100AD00034012FEF83ED90E3215080409040E1F707
-:100AE00000C0000080E40E94B205809300018111E3
-:100AF0002EC00E94DC0580930001811128C00E9455
-:100B0000DC0580930001811122C08FE30E94DC0587
-:100B10008093000181111BC00E94D40580E40E94D3
-:100B2000B20580930001811112C08CE00E94DC05A7
-:100B30008093000181110BC00E94DC0580930001AD
-:100B4000811105C08FE30E94DC05809300010E94A3
-:100B5000D4058091000108951092B9008AE0809335
-:100B6000B800089594EA9093BC009091BC0097FF60
-:100B7000FCCF9091B900987F983021F0903111F01E
-:100B800081E008958093BB0084E88093BC0080914D
-:100B9000BC0087FFFCCF8091B900887F883111F0BD
-:100BA000803471F780E0089584E98093BC008091DF
-:100BB000BC0084FDFCCF08958093BB0084E8809343
-:100BC000BC008091BC0087FFFCCF9091B900987F5A
-:100BD00081E0983209F480E0089584E88093BC00B5
-:100BE0008091BC0087FFFCCF8091BB00089580916D
-:100BF0000001811115C080E40E94B20580930001BC
-:100C000081110CC082E10E94DC05809300018111FA
-:100C100005C08FEF0E94DC05809300010E94D4057F
-:100C200084B1807F84B985B1807F85B98AB1837FA3
-:100C30008AB98BB1837F8BB93E98469808950E94FC
-:100C40005D05809300010E94F70580B38C7080BB26
-:100C500081B3836F81BBE4E4F1E0A6E3B1E01192DC
-:100C60001D9281E0E235F807D1F70C944705BF9259
-:100C7000CF92DF92EF92FF920F931F93CF93DF9368
-:100C800080910001882379F0809135018F5F8093F6
-:100C90003501811108C00E945D058093000181111A
-:100CA00002C00E94EF0406E311E0C0E0D0E0DD24C2
-:100CB000D39482E0C82EEE24E394F12CC73000F5E3
-:100CC00080910001811162C080E40E94B20580938E
-:100CD0000001811112C082E10E94DC0580930001B5
-:100CE00081110BC0C7010C2E01C0880F0A94EAF7CE
-:100CF00080950E94DC05809300010E94D40546C0C7
-:100D0000CA30A1F028F4C83059F0C93061F005C0EC
-:100D1000CC3089F070F0CD3089F0209A289810C03E
-:100D2000219A29980DC0229A2A980AC0239A2B98B2
-:100D300007C0529A01C0539A5B9802C03E9A4698E7
-:100D4000E0EAEA95F1F78FB179995AC092E08170A3
-:100D50008D25892B7C9B02C090E001C094E0892BFB
-:100D60007D9B02C090E001C098E0892B7E9B02C071
-:100D700090E001C090E1892B9FB19095991F992730
-:100D8000991F9295990F907E892B0FC08091000139
-:100D900081114BC080E40E94B2058093000188233A
-:100DA00089F1B12C0E94D4058B2DF8019081981700
-:100DB00019F08083C09201010E94F70521960F5F10
-:100DC0001F4FCE30D10509F079CF809101018823E2
-:100DD00071F1815080930101882339F08FE99FE000
-:100DE0000197F1F700C0000022C0A4E4B1E0E6E3FF
-:100DF000F1E081918D9391E0E434F907D1F717C0C8
-:100E000090E0A5CF83E10E94DC0580930001811171
-:100E1000C8CF81E40E94B205809300018111C1CF47
-:100E20000E94ED05B82EB094BDCF80E0BECF0E94E9
-:100E3000ED0481E0DF91CF911F910F91FF90EF9032
-:100E4000DF90CF90BF900895E82FF0E0EC5BFE4F6D
-:100E50008081089508958B3B910578F4883A910537
-:100E600040F5853A9105D0F48430910508F0B1C081
-:100E70008130910509F4ADC06BC0803E910508F446
-:100E800067C0883E910508F4A4C09C01205F310929
-:100E90002031310508F05CC090650895853A9105D0
-:100EA00009F459C0863A910509F458C083E890E4E2
-:100EB0000895883A910509F454C0893A910509F4D6
-:100EC00053C08A3A910509F452C08B3A910509F44E
-:100ED00051C08C3A910509F450C08D3A910509F43E
-:100EE0004FC0803B910509F44EC08E3A910509F43C
-:100EF0004DC08F3A910509F44CC0813B910509F42E
-:100F00004BC0823B910509F44AC0833B910509F42B
-:100F100049C0843B910509F448C0853B910509F41B
-:100F200047C0863B910509F446C0873B910509F40B
-:100F300045C0883B910509F444C0893B910509F4FB
-:100F400043C08A3B910509F042C08AE296E40895C5
-:100F500080E090E0089581E890E4089582E890E4CC
-:100F6000089582EE94E4089589EE94E408958AEE5B
-:100F700094E4089585EB94E4089586EB94E4089551
-:100F800087EB94E408958CEC94E408958DEC94E45C
-:100F9000089583E895E408958AE895E4089582E940
-:100FA00095E4089584E995E4089581E296E408952E
-:100FB00083E296E4089584E296E4089585E296E457
-:100FC000089586E296E4089587E296E4089580E025
-:100FD00094E40895089596E0799FF001112494E532
-:100FE000899FE00DF11D1124E60FF11DEE0FFF1F8B
-:100FF000E851FF4F859194910895880F991F805A69
-:101000009040FC01859194910895880F991F80521A
-:101010009F4FFC0185919491089526E0729FF00105
-:10102000112444E5849FE00DF11D1124E60FF11D0C
-:10103000EE0FFF1FE851FF4F25913491C9019A959A
-:1010400081159F4110F4C9010895C901905281157D
-:10105000904128F4C9019F700E9405080895C901B4
-:1010600090538115904120F4C9019927906C0895FF
-:10107000211580E5380769F40E94AD159FEF24E340
-:101080004CE0915020404040E1F700C000000C943B
-:10109000081D213080E5380731F48091CD01816051
-:1010A0008093CD010895C90190558115904108F0B4
-:1010B00050C0832F99278F70992781309105D9F4DB
-:1010C000A9014370552702C0880F991F4A95E2F77E
-:1010D0009C68A90164E0440F551F6A95E1F7442715
-:1010E0005370842B952B73E0220F331F7A95E1F711
-:1010F000207633271DC08230910529F4922F88274E
-:10110000816F906A089583309105A9F4A901437015
-:10111000552781E090E002C0880F991F4A95E2F7B9
-:101120009C6843E0220F331F4A95E1F7207E377019
-:10113000822B932B08950497F1F4A901437055274E
-:1011400081E090E002C0880F991F4A95E2F79A6803
-:10115000E8CFC90190578115904120F4C9019F70D3
-:1011600090620895C90190588115904120F4C901F9
-:101170009F70906A0895203E3105E0F4203C3105CF
-:1011800058F52133310509F470C048F4293231058E
-:1011900009F464C02A32310509F46EC074C02933E1
-:1011A0003105F1F022383105D9F02533310509F444
-:1011B0004EC069C0233E310589F138F4203E310527
-:1011C000C1F0223E3105E1F05EC0263E310569F1F5
-:1011D000273E3105A9F157C0C9010E94FD070895B6
-:1011E0008091E00180FD02C081FF4DC080EE90E063
-:1011F0004BC08091E00180FFF9CF89E390E044C0CB
-:101200008091E00182FF0EC08091E00184FF03C065
-:1012100080E090E039C083EE90E036C08091E0013C
-:1012200082FFF2CF82EE90E02FC08091E00183FF39
-:101230000BC08091E00184FDEBCF87EE90E024C0ED
-:101240008091E00183FFF5CF86EE90E01DC0809194
-:10125000E00185FF07C089E290E016C08091E001BF
-:1012600085FFF9CF85E390E00FC08091E00186FF14
-:1012700007C08AE290E008C08091E00186FFF9CFC4
-:1012800081E390E001C0C9010E942B0708950895F1
-:101290000C944709809162010895CF93DF9300D0A9
-:1012A0001F92CDB7DEB72091E601243019F523E077
-:1012B00029839B838A832093E9008FEF9091E80034
-:1012C000815095FD06C095ED9A95F1F700008111CA
-:1012D000F5CF8091E80085FF0DC040E050E063E06D
-:1012E00070E0CE0101960E94B70B8091E8008E77E6
-:1012F0008093E8000F900F900F90DF91CF910895A9
-:10130000CF93DF9300D01F92CDB7DEB72091E601D7
-:10131000243021F522E029839B838A8383E0809314
-:10132000E9008FEF9091E800815095FD06C095EDA2
-:101330009A95F1F700008111F5CF8091E80085FFC3
-:101340000DC040E050E063E070E0CE0101960E94E5
-:10135000B70B8091E8008E778093E8000F900F9094
-:101360000F90DF91CF9108952091E6012430F1F4A0
-:1013700022E02093E9002FEF3091E800215035FD65
-:1013800006C035ED3A95F1F700002111F5CF209117
-:10139000E80025FF0BC040E050E065E070E00E94EF
-:1013A000B70B8091E8008E778093E8000895CF9383
-:1013B000DF93EC018091E601843009F046C0909102
-:1013C0000C019923D9F090910D019923B9F08093E4
-:1013D000E9008FEF9091E800815095FD06C095E1FE
+:100000000C94D7020C941B030C941B030C941B033D
+:100010000C941B030C941B030C941B030C941B03E8
+:100020000C941B030C941B030C94500E0C94220F85
+:100030000C941B030C941B030C941B030C941B03C8
+:100040000C941B030C94A1230C941B030C941B0312
+:100050000C941B030C94451D0C941B030C941B0364
+:100060000C941B030C941B030C941B030C941B0398
+:100070000C941B030C941B030C941B030C941B0388
+:100080000C941B030C941B030C941B030C941B0378
+:100090000C941B030C941B030C941B030C941B0368
+:1000A0000C941B030C941B030C941B032B035F0386
+:1000B0008403C2032B036803A603D00391049104B5
+:1000C00054045E0468047A04870FA90F9410A90FE2
+:1000D0009410EB0F0E1094106310761070137013C1
+:1000E000B113B113F3132F142F162F1647142F1615
+:1000F0003E153E1509162F162F161D16000000007E
+:1001000000000000000000000000000000000000EF
+:100110000AC80BC80CC80DC80EC80FC810C811C833
+:100120000D200C200B300A30E00000001E001400EF
+:1001300004001D0000074E001F001A0016001B00DF
+:10014000000F4C002000080007000600E2002A0013
+:100150002100150009001900E3004B0022001700E0
+:100160000A00050000004A0029002F0000002B02B1
+:1001700000004D002D00300000002B00000050005A
+:1001800023001C000B00110000004F002400180089
+:100190000D001000E700520025000C000E00360094
+:1001A000E6002C00260012000F003700000F280088
+:1001B00027001300330038000007510011201020E1
+:1001C0000F200E30E40000000100010001000100DA
+:1001D000E00000003A001E02200222020007510047
+:1001E0003B001F0221022302000F28003C002F02C7
+:1001F00026022F00E2002C003D00300227023000D2
+:10020000E30052003E002402350035020000500099
+:100210002900360200002B0000004F002D0037029D
+:1002200000002B0200004A003F003102380031007C
+:1002300000004D004000240021001E0027784B00E4
+:100240004100250022001F0037744C0042002600A8
+:10025000230020002E7F2A004300380025022D00B5
+:100260002E774E00010001000100010028710000FE
+:100270000100010001000100E000000044006600F0
+:10028000A60000000007B50045001430F20016304B
+:10029000F60000006800F000F100F100F400B60084
+:1002A00069001530F3001730F500B4006A00A900AA
+:1002B000AA00A8000000B8002900F9000000FA0018
+:1002C0000000B9000000F9000000FA000000AC00D6
+:1002D0006B004600530000000000AB006C004A00B9
+:1002E00050004D004978A9006D00520051005100A6
+:1002F0004C74AE006E004B004F004E00000FAD007E
+:100300006F00B100B30000000007AA000100010067
+:1003100001000100E40000000100010001000100F3
+:10032000010000002900010001000100010001009E
+:1003300001000100010001000100010001000100B5
+:1003400001000100010001000100010001000100A5
+:100350000100010001000100010001000000010096
+:100360000100010000000100000001000100010087
+:100370000000010000000100010001000100010077
+:100380000000010001000100010001000100010066
+:100390000100010001000100010001000100010055
+:1003A00001000100010001002A000100010001001C
+:1003B00001000100010001000100E5000100000052
+:1003C00016034500720067006F0044006F0078005C
+:1003D000200045005A000000160345007200670027
+:1003E0006F0044006F007800200045005A000000B4
+:1003F0000403090409026D00040100A0FA090400C5
+:10040000000103010100092111010001223F000741
+:1004100005810308000A0904010001030102000923
+:100420002111010001224D000705820308000A097D
+:10043000040200010300000009211101000122361D
+:10044000000705830308000A0904030001030000F4
+:100450000009211101000122390007058403100061
+:10046000011201100100000008EDFE071301000158
+:1004700002000105010906A101050719E029E71598
+:1004800000250195087501810205081901290595C6
+:100490000575019102950175039101050719002960
+:1004A0007715002501957875018102C00501098045
+:1004B000A101850216010026B7001A01002AB70023
+:1004C000751095018100C0050C0901A10185031675
+:1004D0000100269C021A01002A9C027510950181D8
+:1004E00000C005010902A1010901A10005091901C6
+:1004F00029051500250195057501810295017503F2
+:1005000081010501093009311581257F95027508A2
+:10051000810609381581257F950175088106050C2E
+:100520000A38021581257F950175088106C0C0052E
+:10053000010906A101050719E029E7150025019524
+:1005400008750181029501750881010508190129C5
+:10055000059505750191029501750391010507192E
+:100560000029FF150025FF950675088100C00000D1
+:10057000000000000000000000010204060A0F173E
+:10058000202C3A4A5D71879DB3C7DAE9F5FCFFFC80
+:10059000F5E9DAC7B39D87715D4A3A2C20170F0A37
+:1005A0000604020100000000000000000000112409
+:1005B0001FBECFEFDAE0DEBFCDBF04B603FE24C01E
+:1005C0008091F6019091F701A091F801B091F901A5
+:1005D0008730904BA740B04BB9F41092F6011092BF
+:1005E000F7011092F8011092F90114BE84B7877FC9
+:1005F00084BF88E10FB6F894809360001092600089
+:100600000FBEE0E0FFE3099511E0A0E0B1E0E0ED0E
+:10061000FAE402C005900D92A433B107D9F721E0A6
+:10062000A4E3B1E001C01D92A63FB207E1F70E942A
+:10063000960B0C9466250C940000DC01462F50E0CC
+:100640004A5051094E30510508F06BC14A5A5F4F6C
+:10065000FA010C94162512962C91129780913A016A
+:1006600090913B012223F9F015962C91207FD9F42B
+:1006700001968330910510F082E090E090933B0169
+:1006800080933A0180913A0190913B01823091052B
+:1006900029F489E30E94F81189E30EC0019709F05B
+:1006A00040C181EEFAC0019790933B0180933A01DB
+:1006B000892B09F036C181EE0E94C01232C1129618
+:1006C0002C918091380190913901222379F090C0CA
+:1006D00012963C91129715962C9180913801909129
+:1006E0003901207F31117AC009F09FC001979093A2
+:1006F000390180933801892B09F013C180913501AC
+:1007000081110FC181E067C012963C911297159636
+:100710002C918091360190913701207F332361F035
+:10072000222309F491C0009709F08EC02091340172
+:1007300021118AC08BE2B1C02223B1F00097A1F44D
+:1007400020913401211110C08BE2B6CF12963C915A
+:10075000129715962C918091360190913701207F48
+:10076000311168C009F08DC00197909337018093D3
+:100770003601892B09F0D5C0809134018111D1C097
+:1007800082E029C012969C91129715968C9199231C
+:10079000B1F0982F907F79F080FD0DC085E37DC08A
+:1007A00012969C91129715968C91992379F0982F17
+:1007B000907F09F06FC083E00E94C31AB2C0982FE7
+:1007C000907F41F080FD06C085E376CF982F907F23
+:1007D00009F066C083E00E94E41AA3C0222341F01E
+:1007E000009731F420913501211102C084E355C0F6
+:1007F00001968330910510F082E090E090933901EA
+:1008000080933801809138019091390182309105AF
+:1008100029F0019709F085C081E0CECF80913501A4
+:1008200091E08927809335017CC0009709F05ECF65
+:1008300084E342CF222341F0009731F42091340128
+:10084000211102C081E329C001968330910510F087
+:1008500082E090E0909337018093360180913601D9
+:10086000909137018230910529F0019709F059C024
+:1008700082E0A2CF8091340191E0892780933401F6
+:1008800050C0009709F070CF2091340121116CCF36
+:1008900081E312CF80FD8FCF8EE20E94F81141C01C
+:1008A00080FD98CF8EE208CF12968C91882319F0A4
+:1008B00080EF90E013C080EF90E017C012968C910B
+:1008C000882319F080EF90E01BC080EF90E021C0FA
+:1008D00012968C91882339F081EF90E00E94B91F25
+:1008E00082EF90E011C081EF90E00E94212082EF22
+:1008F00090E013C012968C91882349F081EF90E02C
+:100900000E94B91F83EF90E00E94B91F08C081EFD9
+:1009100090E00E94212083EF90E00E9421200E941D
+:10092000A62080E090E00895089580913A0190918A
+:100930003B01892B19F0259A2D9A0DC0E0910E01EB
+:10094000F0910F01808185FDF6CF0E94CF1081FDCF
+:10095000F2CF25982D988091B90181FF03C0269A86
+:100960002E9A02C026982E988091B90182FF03C06A
+:10097000279A2F9A089527982F9808950C949504F4
+:1009800056985E9825982D9826982E9827982F98F7
+:100990008FEF90E0909389008093880090938B0074
+:1009A00080938A0090938D0080938C00259A2D9AD5
+:1009B0002FEF80E792E0215080409040E1F700C0A7
+:1009C0000000269A2E9A2FEF80E792E02150804077
+:1009D0009040E1F700C00000279A2F9A2FEF80E7A0
+:1009E00092E0215080409040E1F700C0000025983F
+:1009F0002D982FEF80E792E0215080409040E1F762
+:100A000000C0000026982E982FEF80E792E021503A
+:100A100080409040E1F700C0000027982F9856983A
+:100A20005E9825982D9826982E9827982F980895A7
+:100A300089EA8093800089E08093810024982C9833
+:100A40003F988AB18F748AB96E98479A8BB1806B40
+:100A50008BB9769A0E94C0040C94940480E280932F
+:100A6000000180913C0181110EC00E947D0581E052
+:100A700080933C012FEF83ED90E321508040904024
+:100A8000E1F700C0000080E40E948305809300012C
+:100A900081112EC00E94AD0580930001811128C0F4
+:100AA0000E94AD0580930001811122C08FE30E9456
+:100AB000AD058093000181111BC00E94A50580E453
+:100AC0000E94830580930001811112C08CE00E9476
+:100AD000AD058093000181110BC00E94AD0580938C
+:100AE0000001811105C08FE30E94AD0580930001D4
+:100AF0000E94A5058091000108951092B9008AE036
+:100B00008093B800089594EA9093BC009091BC0043
+:100B100097FFFCCF9091B900987F983021F09031E9
+:100B200011F081E008958093BB0084E88093BC00BD
+:100B30008091BC0087FFFCCF8091B900887F88310D
+:100B400011F0803471F780E0089584E98093BC004F
+:100B50008091BC0084FDFCCF08958093BB0084E8A5
+:100B60008093BC008091BC0087FFFCCF9091B900BE
+:100B7000987F81E0983209F480E0089584E88093BA
+:100B8000BC008091BC0087FFFCCF8091BB00089522
+:100B900080910001811115C080E40E94830580933B
+:100BA000000181110CC082E10E94AD05809300011B
+:100BB000811105C08FEF0E94AD05809300010E9456
+:100BC000A50584B1807F84B985B1807F85B98AB15C
+:100BD000837F8AB98BB1837F8BB93E9846980895FD
+:100BE0000E942E05809300010E94C80580B38C707E
+:100BF00080BB81B3836F81BBECE4F1E0AEE3B1E095
+:100C000011921D9281E0EA35F807D1F70C9418058E
+:100C1000BF92CF92DF92EF92FF920F931F93CF93E9
+:100C2000DF9380910001882379F080913D018F5FEF
+:100C300080933D01811108C00E942E058093000120
+:100C4000811102C00E94C0040EE311E0C0E0D0E0B8
+:100C5000DD24D39482E0C82EEE24E394F12CC73037
+:100C600000F580910001811162C080E40E9483053B
+:100C700080930001811112C082E10E94AD05809332
+:100C8000000181110BC0C7010C2E01C0880F0A940E
+:100C9000EAF780950E94AD05809300010E94A505AA
+:100CA00046C0CA30A1F028F4C83059F0C93061F00C
+:100CB00005C0CC3089F070F0CD3089F0209A2898AA
+:100CC00010C0219A29980DC0229A2A980AC0239A06
+:100CD0002B9807C0529A01C0539A5B9802C03E9A63
+:100CE0004698E0EAEA95F1F78FB179995AC092E017
+:100CF00081708D25892B7C9B02C090E001C094E01F
+:100D0000892B7D9B02C090E001C098E0892B7E9BDF
+:100D100002C090E001C090E1892B9FB19095991F8E
+:100D20009927991F9295990F907E892B0FC08091DA
+:100D3000000181114BC080E40E9483058093000173
+:100D4000882389F1B12C0E94A5058B2DF801908193
+:100D5000981719F08083C09201010E94C80521965E
+:100D60000F5F1F4FCE30D10509F079CF809101017F
+:100D7000882371F1815080930101882339F08FE934
+:100D80009FE00197F1F700C0000022C0ACE4B1E0A1
+:100D9000EEE3F1E081918D9391E0EC34F907D1F726
+:100DA00017C090E0A5CF83E10E94AD0580930001BC
+:100DB0008111C8CF81E40E948305809300018111D5
+:100DC000C1CF0E94BE05B82EB094BDCF80E0BECF8B
+:100DD0000E94BE0481E0DF91CF911F910F91FF909F
+:100DE000EF90DF90CF90BF900895E82FF0E0E45BA4
+:100DF000FE4F808108950895089596E0799FF0014F
+:100E0000112494E5899FE00DF11D1124E60FF11DD9
+:100E1000EE0FFF1FE05EFE4F859194910895880FBD
+:100E2000991F84589040FC01859194910895880FF2
+:100E3000991F84509F4FFC018591949108950F93C1
+:100E40001F93CF93DF93EC01811520E3920730F5D8
+:100E5000811530E2930708F0B1C08B3B910588F40F
+:100E6000883A910508F058C0853A910508F049C0C4
+:100E70008430910508F043C08130910509F4B2C176
+:100E8000AEC18F3F910509F0D0F5803F910508F084
+:100E900092C0805E9109089790F1A1C1C11581E5CA
+:100EA000D807A8F4C23090E5D90708F09FC0C11553
+:100EB00020E5D20709F486C008F092C0C11580E48D
+:100EC000D80708F08CC18E011127106CCCC1C11558
+:100ED00090E8D90758F4C11520E7D20708F07BC184
+:100EE000C11530E6D30708F423C179C1C11580E9E3
+:100EF000D80708F074C18E011F70106AB4C18E014A
+:100F0000B2C1853A910509F470C1863A910509F498
+:100F10006FC103E810E4A7C1883A910509F46BC1D9
+:100F2000893A910509F46AC18A3A910509F469C1BF
+:100F30008B3A910509F468C18C3A910509F467C1AF
+:100F40008D3A910509F466C1803B910509F465C1AC
+:100F50008E3A910509F464C18F3A910509F463C191
+:100F6000813B910509F462C1823B910509F461C19D
+:100F7000833B910509F460C1843B910509F45FC18D
+:100F8000853B910509F45EC1863B910509F45DC17D
+:100F9000873B910509F45CC1883B910509F45BC16D
+:100FA000893B910509F45AC18A3B910509F059C161
+:100FB0000AE216E458C18C01106555C19F700E9469
+:100FC000170752C10E9452169FEF24E33CE0915054
+:100FD00020403040E1F700C000000E946A1D43C17C
+:100FE0008091D50181608093D5013DC10E94121F7F
+:100FF000811102C00E94F81E0E942F1F90E0909362
+:10100000F6018093F501C23080E5D80721F4809184
+:10101000F501816086C0C43090E5D90721F4809144
+:10102000F50182607EC0C63020E5D20721F48091B0
+:10103000F501846076C0C83030E5D30719F480919B
+:10104000F50127C0CA3080E5D80721F48091F50169
+:10105000806167C0CC3090E5D90721F48091F5011B
+:1010600080625FC0CE3020E5D20721F48091F50187
+:10107000806457C0C03130E5D30721F48091F50179
+:1010800080684FC0C23180E5D80729F48091F5010E
+:101090008460886046C0C33090E5D90721F4809110
+:1010A000F5018E7F3EC0C53020E5D20721F4809146
+:1010B000F5018D7F36C0C73030E5D30721F480912C
+:1010C000F5018B7F2EC0C93080E5D80719F48091D7
+:1010D000F50126C0CB3090E5D90721F48091F501C8
+:1010E0008F7E1FC0CD3020E5D20721F48091F5011D
+:1010F0008F7D17C0CF3030E5D30721F48091F50103
+:101100008F7B0FC0C13180E5D80721F48091F501B4
+:101110008F7707C0C331D04531F48091F5018B7FC3
+:10112000877F8093F5018091F5010E94331F9BC05A
+:101130008D2F99278F70992781309105E9F48E01C1
+:10114000037011279C0102C0220F331F0A95E2F79A
+:1011500089011C68CE0164E0880F991F6A95E1F748
+:1011600088279370082B192B73E0CC0FDD1F7A951D
+:10117000E1F7C076DD272CC08230910529F41C2FC1
+:101180000027016F106A6FC08330910561F4CE01B2
+:101190008370992701E010E002C0000F111F8A95AB
+:1011A000E2F71C680EC0049709F05DC0CE018370A1
+:1011B000992701E010E002C0000F111F8A95E2F7A5
+:1011C0001A6843E0CC0FDD1F4A95E1F7C07ED77067
+:1011D0000C2B1D2B48C08E011F70106244C000E014
+:1011E00010E041C001E010E03EC001E810E43BC067
+:1011F00002E810E438C002EE14E435C009EE14E44D
+:1012000032C00AEE14E42FC005EB14E42CC006EB48
+:1012100014E429C007EB14E426C00CEC14E423C04A
+:101220000DEC14E420C003E815E41DC00AE815E441
+:101230001AC002E915E417C004E915E414C001E27C
+:1012400016E411C003E216E40EC004E216E40BC07B
+:1012500005E216E408C006E216E405C007E216E45B
+:1012600002C000E014E4C801DF91CF911F910F91FB
+:10127000089596E0799FF001112494E5899FE00D8F
+:10128000F11D1124E60FF11DEE0FFF1FE05EFE4F72
+:1012900085919491803E9105E0F4803C910558F54C
+:1012A0008133910509F46FC048F48932910509F43E
+:1012B00063C08A32910509F46DC072C0893391050B
+:1012C000E9F082389105D1F08533910509F44DC0DC
+:1012D00067C0833E910581F138F4803E9105B9F0F5
+:1012E000823E9105D9F05CC0863E910561F1873E52
+:1012F0009105A1F155C00E940F0708952091F501B5
+:1013000020FD02C021FF4CC080EE90E049C08091DA
+:10131000F50180FFF9CF89E390E042C08091F501AB
+:1013200082FF0EC08091F50184FF03C080E090E051
+:1013300037C083EE90E034C08091F50182FFF2CF98
+:1013400082EE90E02DC08091F50183FF0BC080916B
+:10135000F50184FDEBCF87EE90E022C08091F5018E
+:1013600083FFF5CF86EE90E01BC08091F50185FFED
+:1013700007C089E290E014C08091F50185FFF9CFA4
+:1013800085E390E00DC08091F50186FF07C08AE2F9
+:1013900090E006C08091F50186FFF9CF81E390E0EF
+:1013A0000E941F07089508950C94D30980916A0143
+:1013B0000895CF93DF9300D01F92CDB7DEB7209171
+:1013C000EC01243019F523E029839B838A83209341
+:1013D000E9008FEF9091E800815095FD06C095EDF2
:1013E0009A95F1F700008111F5CF8091E80085FF13
-:1013F0002CC040E050E060E170E017C081E08093D5
-:10140000E9008FEF9091E800815095FD06C095EDC1
-:101410009A95F1F700008111F5CF8091E80085FFE2
-:1014200014C040E050E068E070E0CE010E94B70BCD
-:101430008091E8008E778093E80080E1FE01A2E5CC
-:10144000B1E001900D928A95E1F7DF91CF91089577
-:101450008091E501811109C00E94490D0E94A60DED
-:101460008091E20084608093E20008951092E5018B
-:10147000089508950C942E230E949F1C0E943423EB
-:101480000E9443100C94480942E061EC81E00E9404
-:10149000C30C42E061EC82E00E94C30C42E061ECCC
-:1014A00083E00E94C30C42E161EC84E00C94C30C25
-:1014B0008091E801833009F455C030F4813071F037
-:1014C000823009F48EC008958A3009F47AC08B30D6
-:1014D00009F460C0893009F09CC020C08091E70108
-:1014E000813A09F096C08091E800877F8093E800F8
-:1014F0008091EB019091EC01892B21F060E080E07C
-:1015000090E003C060E182E591E070E00E94000C91
-:101510008091E8008B778093E80008958091E7013F
-:10152000813209F076C08091EB019091EC01009737
-:1015300019F0039709F06DC08091E800877F8093D0
-:10154000E8008091E80082FD05C08091E6018111EC
-:10155000F8CF5FC08091F100809362018091E80034
-:101560008B7753C08091E701813A09F052C0809196
-:10157000EB019091EC01892B09F04BC08091E800C0
-:10158000877F8093E8008091E80080FFFCCF809106
-:101590000C0136C08091E7018132D9F58091EB01D1
-:1015A0009091EC01892BA9F58091E800877F8093C9
-:1015B000E8000E94F80C8091E90180930C010C94E2
-:1015C000AD158091E701813221F58091E800877F98
-:1015D0008093E8000E94F80C8091EA0180936301F7
-:1015E00008958091E701813AA1F48091E800877F16
-:1015F0008093E8008091E80080FFFCCF8091630138
-:101600008093F1008091E8008E778093E8000C943D
-:10161000F80C089584B7877F84BF88E10FB6F894EB
-:1016200080936000109260000FBE90E080E80FB6DB
-:10163000F89480936100909361000FBE0E94921015
-:101640000E94490D0E94A60D8091E2008460809363
-:10165000E20078940E9421100E94941082E091E0B0
-:101660000E943E100E941C238091E601853069F49F
-:101670000E94621C8091E4018823B1F30E948A1CBD
-:10168000882391F30E94A10BEFCF0E949A10ECCF18
-:10169000292F332723303105A9F06CF4213031058F
-:1016A00009F442C02230310509F043C08DE690E0D4
-:1016B00024E037E042C021323105C9F02232310541
-:1016C00019F137C099278130910541F08230910599
-:1016D00041F0892B71F5E0E0F7E005C0E8EEF6E0B7
-:1016E00002C0E0EDF6E0849190E09F0126C06430F6
-:1016F00000F5E62FF0E0EE0FFF1FEE5DFE4F2081BC
-:10170000318189E090E019C0643098F4E62FF0E070
-:10171000DF01AA0FBB1FA65EBE4F2D913C91EA5E72
-:10172000FE4F808190E009C082E190E021E737E040
-:1017300004C080E090E020E030E0FA0131832083B3
-:10174000089580E189BD82E189BD09B400FEFDCF25
-:101750008091D8008F7D8093D8008091E0008260D6
-:101760008093E0008091E00081FDFCCF0895CF924E
-:10177000DF92EF92FF920F931F93CF93DF937C0141
-:101780008B01EA010E94190D811131C0209731F0BF
-:1017900088819981081B190BE80EF91EC12CD12CE8
-:1017A0000115110519F18091E80085FD14C08091A3
-:1017B000E8008E778093E800209741F08881998136
-:1017C0008C0D9D1D9983888385E011C00E94190DA1
-:1017D000882331F30CC0F70181917F018093F100E0
-:1017E00001501109FFEFCF1ADF0ADACF80E0DF9155
-:1017F000CF911F910F91FF90EF90DF90CF900895C0
-:101800002091ED013091EE012617370748F0611560
-:10181000710539F42091E8002E772093E80001C08B
-:10182000B901FC0120E061157105B9F18091E60173
-:10183000882309F440C0853009F43FC08091E80056
-:1018400083FD3DC08091E80082FF06C08091E800E2
-:1018500082FF26C080E008958091E80080FFE3CFFA
-:101860002091F3008091F20090E0922B61157105B8
-:1018700051F08830910538F421912093F1006150A6
-:1018800071090196F3CF21E0089709F020E08091DB
-:10189000E8008E778093E800C6CF2111C7CFD6CF5E
-:1018A0008091E601882339F0853039F08091E80095
-:1018B00083FFCCCF04C082E0089583E0089581E0E7
-:1018C00008952091ED013091EE012617370748F079
-:1018D0006115710539F42091E8002E772093E80016
-:1018E00001C0B901FC0120E061157105C1F18091D1
-:1018F000E601882309F441C0853009F440C0809195
-:10190000E80083FD3EC08091E80082FF06C0809120
-:10191000E80082FF27C080E008958091E80080FF02
-:10192000E3CF2091F3008091F20090E0922B6115BB
-:10193000710559F08830910540F424912093F1000D
-:101940003196615071090196F2CF21E0089709F0B4
-:1019500020E08091E8008E778093E800C5CF2111C8
-:10196000C6CFD5CF8091E601882339F0853039F094
-:101970008091E80083FFCBCF04C082E0089583E02C
-:10198000089581E00895982F973058F59093E900D5
-:10199000981739F07091EC002091ED005091F00013
-:1019A00003C0242F762F50E021FF19C03091EB00A7
-:1019B0003E7F3093EB003091ED003D7F3093ED00A2
-:1019C0003091EB0031603093EB007093EC0020938A
-:1019D000ED005093F0002091EE0027FF07C09F5FBD
-:1019E000D3CF8F708093E90081E0089580E008955F
-:1019F0008091E70187FD05C08091E80080FF0EC05F
-:101A000012C08091E80082FD05C08091E60181113D
-:101A1000F8CF08958091E8008B7708C08091E601A7
-:101A20008111EACF08958091E8008E778093E800D5
-:101A300008958091E4009091E50045E62091EC0046
-:101A400020FF21C02091E80020FD21C02091E60167
-:101A5000222389F0253089F02091EB0025FD0FC06D
-:101A60002091E4003091E5002817390739F34150FF
-:101A700041F0C901E3CF82E0089583E0089581E059
-:101A8000089584E008952091E80022FFDFCF80E0F0
-:101A900008950E94B70D0E94BF0DE0EEF0E0808136
-:101AA00081608083E8EDF0E080818F77808319BCCE
-:101AB000A7EDB0E08C918E7F8C9380818F7E8083A8
-:101AC0001092E50108950F931F93CF93DF930E9427
-:101AD000B70D0E94BF0DC8EDD0E088818F77888355
-:101AE00088818068888388818F7D888319BC109263
-:101AF000E6011092E2011092E4011092E30100EE7F
-:101B000010E0F80180818B7F8083888181608883E9
-:101B100042E060E080E00E94C30CE1EEF0E08081F2
-:101B20008E7F8083E2EEF0E080818160808380811F
-:101B300088608083F80180818E7F808388818061C6
-:101B40008883DF91CF911F910F910895E8EDF0E028
-:101B500080818F7E8083E7EDF0E0808181608083EB
-:101B600084E082BF81E08093E5010C94630DE8ED91
-:101B7000F0E080818E7F80831092E20008951092C1
-:101B8000DA001092E10008951F920F920FB60F92A3
-:101B900011242F933F934F935F936F937F938F9372
-:101BA0009F93AF93BF93EF93FF938091E10082FFE8
-:101BB0000BC08091E20082FF07C08091E1008B7F23
-:101BC0008093E1000E9420108091DA0080FF1FC006
-:101BD0008091D80080FF1BC08091DA008E7F8093B7
-:101BE000DA008091D90080FF0DC080E189BD82E1DB
-:101BF00089BD09B400FEFDCF81E08093E6010E941B
-:101C0000280A05C019BC1092E6010E94360A80918C
-:101C1000E10080FF19C08091E20080FF15C0809133
-:101C2000E2008E7F8093E2008091E20080618093E9
-:101C3000E2008091D80080628093D80019BC85E0D2
-:101C40008093E6010E943A0A8091E10084FF30C04F
-:101C50008091E20084FF2CC080E189BD82E189BDD2
-:101C600009B400FEFDCF8091D8008F7D8093D8000D
-:101C70008091E1008F7E8093E1008091E2008F7E71
-:101C80008093E2008091E20081608093E200809185
-:101C9000E201882311F084E007C08091E30087FF10
-:101CA00002C083E001C081E08093E6010E943C0A0B
-:101CB0008091E10083FF29C08091E20083FF25C06D
-:101CC0008091E100877F8093E10082E08093E601CC
-:101CD0001092E2018091E1008E7F8093E10080917B
-:101CE000E2008E7F8093E2008091E2008061809329
-:101CF000E20042E060E080E00E94C30C8091F000CE
-:101D000088608093F0000E94390AFF91EF91BF91A3
-:101D1000AF919F918F917F916F915F914F913F9183
-:101D20002F910F900FBE0F901F9018951F920F923A
-:101D30000FB60F9211242F933F934F935F936F939E
-:101D40007F938F939F93AF93BF93CF93EF93FF9323
-:101D5000C091E900CF708091EC001092E900809171
-:101D6000F000877F8093F00078940E94D20E10924A
-:101D7000E9008091F00088608093F000C093E90052
-:101D8000FF91EF91CF91BF91AF919F918F917F91F3
-:101D90006F915F914F913F912F910F900FBE0F90D8
-:101DA0001F9018951F93CF93DF93CDB7DEB7AA97F7
-:101DB0000FB6F894DEBF0FBECDBFE7EEF1E0809125
-:101DC000F100819321E0EF3EF207C9F70E94580A23
-:101DD0008091E80083FF1CC12091E7013091E80168
-:101DE000832F90E08A30910508F012C1FC01EA5A75
-:101DF000FF4F0C94B624203881F0223809F008C136
-:101E00008091EB018F708093E9008091EB0085FB5E
-:101E1000882780F91092E90006C08091E301909133
-:101E2000E401911182609091E800977F9093E8001F
-:101E30008093F1001092F100C5C0822F8D7F09F0D0
-:101E4000E7C0222319F0223061F0E2C08091E9015D
-:101E5000813009F0DDC0333009F080E08093E40187
-:101E600028C08091E901811124C02091EB012F70DD
-:101E700009F4CEC02093E9008091EB0080FF19C0E7
-:101E80008091EB00333011F4806211C08061809347
-:101E9000EB0081E090E0022E01C0880F0A94EAF77F
-:101EA0008093EA001092EA008091EB0088608093B2
-:101EB000EB001092E9008091E800877F86C0211135
-:101EC000A7C01091E9011F778091E3008078812BF2
-:101ED0008093E3008091E800877F8093E8000E9470
-:101EE000F80C8091E80080FFFCCF8091E3008068CF
-:101EF0008093E300112311F083E001C082E080931E
-:101F0000E60186C02058223008F082C08091E901A5
-:101F10009091EA018C3D23E0920779F583E08A8372
-:101F20008AE289834FB7F894DE01139620E03EE001
-:101F300051E2E32FF0E050935700E49120FF03C0FB
-:101F4000E295EF703F5FEF708E2F90E0EA3010F077
-:101F5000C79601C0C0968D939D932F5F243149F79A
-:101F60004FBF8091E800877F8093E8006AE270E0CD
-:101F7000CE0101960E94000C14C0AE014F5F5F4F6E
-:101F80006091EB010E94480B009709F441C0209139
-:101F9000E800277F2093E800BC0189819A810E9494
-:101FA000610C8091E8008B778093E80031C0203885
-:101FB00079F58091E800877F8093E8008091E201C5
-:101FC0008093F1008091E8008E778093E8000E9472
-:101FD000F80C1EC021111CC09091E9019230C0F490
-:101FE0008091E800877F8093E8009093E2010E944F
-:101FF000F80C8091E201811104C08091E30087FF19
-:1020000002C084E001C081E08093E6010E94440A9E
-:102010008091E80083FF0AC08091E800877F809369
-:10202000E8008091EB0080628093EB00AA960FB6E7
-:10203000F894DEBF0FBECDBFDF91CF911F91089501
-:102040000895CF938091E6018823B1F08091E90053
-:102050008F709091EC0090FF02C090E801C090E07A
-:10206000C92FC82B1092E9008091E80083FD0E94DF
-:10207000D20ECF70C093E900CF910895909369017B
-:10208000809368010895E0916801F09169013097AB
-:1020900021F00190F081E02D099480E00895E09115
-:1020A0006801F0916901309721F00280F381E02D01
-:1020B00009940895E0916801F0916901309721F049
-:1020C0000480F581E02D09940895209166013091F6
-:1020D00067018217930771F09093670180936601FF
-:1020E000E0916801F0916901309721F00680F78155
-:1020F000E02D0994089520916401309165018217C3
-:10210000930771F09093650180936401E0916801F9
-:10211000F0916901309721F00084F185E02D099458
-:10212000089508950C9491100E94A51C0E941F060A
-:102130000C946B1DCF92DF92EF92FF920F931F933F
-:10214000CF93DF93CDB7DEB72B970FB6F894DEBFF2
-:102150000FBECDBF0E9437063BE6E32E31E0F32EE3
-:1021600000E010E0C02E802F0E942407F701D190DC
-:102170007F01D826B1F40F5F1F4F0E30110591F784
-:102180008FEF89838A831B820E94AE1C8160782F27
-:102190009D838C8349815A816B818D810E943D1181
-:1021A00041C09091CD0191FF04C08B870E942A0706
-:1021B0008B8520E030E04D2D50E0922FBA01022EA9
-:1021C00002C0759567950A94E2F760FF25C02E83DB
-:1021D000CF82EE24E394F12C02C0EE0CFF1C9A9502
-:1021E000E2F790E08E219F2121E0892B09F420E085
-:1021F00028870E94AE1C8160782F9A8789874E813C
-:102200005F8168858A850E943D11F801E559FE4F7E
-:1022100080818E25808306C02F5F3F4F2630310599
-:1022200061F6A9CF0E944F2010916A010E944310CD
-:102230001817A1F00E94431080936A012B960FB6E5
-:10224000F894DEBF0FBECDBFDF91CF911F910F91EC
-:10225000FF90EF90DF90CF900C9448092B960FB62B
-:10226000F894DEBF0FBECDBFDF91CF911F910F91CC
-:10227000FF90EF90DF90CF900895CF93DF93CDB78D
-:10228000DEB72B970FB6F894DEBF0FBECDBF4F83DE
-:10229000588769877A878B87DE01119686E0FD0172
-:1022A00011928A95E9F785E0FE01379601900D922B
-:1022B0008A95E1F749815A816B817C818D819E816C
-:1022C0000E9479182B960FB6F894DEBF0FBECDBFD3
-:1022D000DF91CF910895CF93C82F882309F4C1C00F
-:1022E000823859F40E94431081FDBBC089E30E94EB
-:1022F000161B0E94E01B89E30CC0833879F40E940E
-:10230000431080FDAEC083E50E94161B0E94E01BB7
-:1023100083E50E94561BCF910C94E01B843859F43E
-:102320000E94431082FD9DC087E40E94161B0E94FC
-:10233000E01B87E4EECF8CEF8C0F813A48F48C2FB2
-:102340000E94842281118DC08C2F0E94161BE3CF26
-:1023500080E28C0F883048F4C77081E001C0880F9C
-:10236000CA95EAF70E94971BD6CF8BE58C0F833076
-:1023700078F4C53A29F0C63A31F482E890E005C015
-:1023800081E890E002C083E890E0CF910C94651062
-:1023900088E58C0F833108F064C0C83A39F1C93A36
-:1023A00041F1CA3A49F1CB3A51F1CC3A59F1CD3A1F
-:1023B00061F1C03B69F1CE3A71F1CF3A79F1C13B9D
-:1023C00081F1C23B89F1C33B91F1C43B99F1C53B1B
-:1023D000A1F1C63BA9F1C73BB1F1C83BB9F1C93B7B
-:1023E000C1F1CA3BC9F58AE292E038C082EE90E0C2
-:1023F00035C089EE90E032C08AEE90E02FC085EBC8
-:1024000090E02CC086EB90E029C087EB90E026C0DE
-:102410008CEC90E023C08DEC90E020C083E891E04C
-:102420001DC08AE891E01AC082E991E017C084E9F2
-:1024300091E014C081E292E011C083E292E00EC00C
-:1024400084E292E00BC085E292E008C086E292E06E
-:1024500005C087E292E002C080E090E0CF910C944A
-:102460007B10CF910895882309F44BC0823859F42A
-:102470000E94431081FF45C089E30E94161B0E9401
-:10248000E01B89E30CC0833871F40E94431080FF85
-:1024900038C083E50E94161B0E94E01B83E50E9462
-:1024A000561B0C94E01B843859F40E94431082FFA1
-:1024B00028C087E40E94161B0E94E01B87E4EFCF30
-:1024C0009CEF980F913A58F390E2980F983050F49F
-:1024D000877091E001C0990F8A95EAF7892F0E94D1
-:1024E0009D1BDFCF9BE5980F933020F480E090E0B8
-:1024F0000C946510885A833120F480E090E00C94AD
-:102500007B100895882321F00E94971B0C94E01BF8
-:102510000895882321F00E949D1B0C94E01B0895D0
-:10252000CF92DF92EF92FF920F931F93CF93DF939F
-:10253000CDB7DEB728970FB6F894DEBF0FBECDBF7C
-:102540008C0185E0F801DE01119601900D928A95CB
-:10255000E1F7F80140813181F280258122952F70C9
-:1025600083819481892B31F03F3F31F481E04F3FEB
-:1025700019F403C081E001C080E080FDCBC2498333
-:102580003A8389819A812F830E94D41A9E838887F7
-:102590000E94D31A0E94A6192F814E816885FF20C0
-:1025A00029F00E94B41B68854E812F81E42FE295AB
-:1025B000EF70F0E0E05AFF4F0C94B624842F807F38
-:1025C000142F1F70882311F01295107FFF2059F0EF
-:1025D000112309F454C2812F68870E94A71B0E940F
-:1025E000E01B68854CC2862F0E943312112309F428
-:1025F00091C2812F0E94AD1B28960FB6F894DEBFC2
-:102600000FBECDBFDF91CF911F910F91FF90EF9043
-:10261000DF90CF900C94E01B342F307F842F8F708D
-:10262000303211F08295807F662319F0613019F104
-:102630002BC0FF20B1F0222309F493C1213009F00F
-:1026400090C128960FB6F894DEBF0FBECDBFDF91C4
-:10265000CF911F910F91FF90EF90DF90CF900C944E
-:10266000C71B222319F0213009F454C28E830E9423
-:10267000CA1B8E8189C1FF2021F0223008F04AC296
-:1026800070C1211147C280C1FF2021F0222309F42B
-:1026900068C1F5C1222309F477C105C2242F26950C
-:1026A0002695237030E02115310521F021303105C8
-:1026B000C9F030C2FF2021F0862F942F937002C002
-:1026C00080E090E028960FB6F894DEBF0FBECDBF35
-:1026D000DF91CF911F910F91FF90EF90DF90CF90FE
-:1026E0000C946510FF2021F0862F942F937002C068
-:1026F00080E090E028960FB6F894DEBF0FBECDBF05
-:10270000DF91CF911F910F91FF90EF90DF90CF90CD
-:102710000C947B10862FFF2019F00E94571F02C0D7
-:102720000E94BF1F28960FB6F894DEBF0FBECDBF24
-:10273000DF91CF911F910F91FF90EF90DF90CF909D
-:102740000C944420842F837009F076C0F110E2C10C
-:10275000262F229526952770220F220F862F8F7005
-:10276000C82ED12CE12CF12C022E04C0CC0CDD1C87
-:10277000EE1CFF1C0A94D2F764FF10C06FE070E0FB
-:1027800080E090E004C0660F771F881F991F2A958C
-:10279000D2F7609570958095909503C060E070E0E9
-:1027A000CB01242F269526952370422F50E04230EE
-:1027B0005105D1F04330510559F16C297D298E29FD
-:1027C0009F294130510541F128960FB6F894DEBF9C
-:1027D0000FBECDBFDF91CF911F910F91FF90EF9072
-:1027E000DF90CF900C94CB196C297D298E299F29DD
-:1027F00028960FB6F894DEBF0FBECDBFDF91CF9104
-:102800001F910F91FF90EF90DF90CF900C94E519FE
-:102810000E94CB19C701B60128960FB6F894DEBF07
-:102820000FBECDBFDF91CF911F910F91FF90EF9021
-:10283000DF90CF900C94B119FF2019F0842F817094
-:1028400001C08695882309F465C1262F2295269517
-:102850002770220F220F862F8F70C82ED12CE12CCB
-:10286000F12C022E04C0CC0CDD1CEE1CFF1C0A94C3
-:10287000D2F764FF10C06FE070E080E090E004C029
-:10288000660F771F881F991F2A95D2F7609570955C
-:102890008095909503C060E070E0CB01242F2695D1
-:1028A00026952370422F50E042305105D1F043303D
-:1028B000510559F16C297D298E299F2941305105F7
-:1028C00041F128960FB6F894DEBF0FBECDBFDF9161
-:1028D000CF911F910F91FF90EF90DF90CF900C94CC
-:1028E0009F1A6C297D298E299F2928960FB6F89466
-:1028F000DEBF0FBECDBFDF91CF911F910F91FF9033
-:10290000EF90DF90CF900C94B91A0E949F1AC701E4
-:10291000B60128960FB6F894DEBF0FBECDBFDF918B
+:1013F0000DC040E050E063E070E0CE0101960E9435
+:10140000430C8091E8008E778093E8000F900F9056
+:101410000F90DF91CF910895CF93DF9300D01F926B
+:10142000CDB7DEB72091EC01243021F522E02983ED
+:101430009B838A8383E08093E9008FEF9091E8009B
+:10144000815095FD06C095ED9A95F1F70000811148
+:10145000F5CF8091E80085FF0DC040E050E063E0EB
+:1014600070E0CE0101960E94430C8091E8008E77D7
+:101470008093E8000F900F900F90DF91CF91089527
+:101480002091EC012430F1F422E02093E9002FEFC9
+:101490003091E800215035FD06C035ED3A95F1F761
+:1014A00000002111F5CF2091E80025FF0BC040E09E
+:1014B00050E065E070E00E94430C8091E8008E7778
+:1014C0008093E8000895CF93DF93EC018091EC01C5
+:1014D000843009F046C090910C019923D9F0909185
+:1014E0000D019923B9F08093E9008FEF9091E80006
+:1014F000815095FD06C095E19A95F1F700008111A4
+:10150000F5CF8091E80085FF2CC040E050E060E11D
+:1015100070E017C081E08093E9008FEF9091E800C0
+:10152000815095FD06C095ED9A95F1F70000811167
+:10153000F5CF8091E80085FF14C040E050E068E0FE
+:1015400070E0CE010E94430C8091E8008E7780937A
+:10155000E80080E1FE01AAE5B1E001900D928A95D4
+:10156000E1F7DF91CF9108958091EB01811109C0DE
+:101570000E94D50D0E94320E8091E200846080931B
+:10158000E20008951092EB01089508950C948E23C3
+:101590000E94011D0E9494230E94CF100C94D40934
+:1015A00042E061EC81E00E944F0D42E061EC82E09C
+:1015B0000E944F0D42E061EC83E00E944F0D42E13A
+:1015C00061EC84E00C944F0D8091EE01833009F4BE
+:1015D00055C030F4813071F0823009F48EC0089526
+:1015E0008A3009F47AC08B3009F460C0893009F080
+:1015F0009CC020C08091ED01813A09F096C0809195
+:10160000E800877F8093E8008091F1019091F201DA
+:10161000892B21F060E080E090E003C060E18AE582
+:1016200091E070E00E948C0C8091E8008B778093B1
+:10163000E80008958091ED01813209F076C0809133
+:10164000F1019091F201009719F0039709F06DC034
+:101650008091E800877F8093E8008091E80082FD18
+:1016600005C08091EC018111F8CF5FC08091F1003D
+:1016700080936A018091E8008B7753C08091ED01DF
+:10168000813A09F052C08091F1019091F201892BC9
+:1016900009F04BC08091E800877F8093E80080913B
+:1016A000E80080FFFCCF80910C0136C08091ED01F5
+:1016B0008132D9F58091F1019091F201892BA9F540
+:1016C0008091E800877F8093E8000E94840D8091DC
+:1016D000EF0180930C010C9452168091ED01813240
+:1016E00021F58091E800877F8093E8000E94840DB7
+:1016F0008091F00180936B0108958091ED01813A12
+:10170000A1F48091E800877F8093E8008091E80051
+:1017100080FFFCCF80916B018093F1008091E80005
+:101720008E778093E8000C94840D089584B7877FAA
+:1017300084BF88E10FB6F894809360001092600037
+:101740000FBE90E080E80FB6F8948093610090930C
+:1017500061000FBE0E941E110E94D50D0E94320E24
+:101760008091E20084608093E20078940E94AD1042
+:101770000E94201182E091E00E94CA100E947C2306
+:101780008091EC01853069F40E94C11C8091EA01CE
+:101790008823B1F30E94EC1C882391F30E942D0C46
+:1017A000EFCF0E942611ECCF292F332723303105AC
+:1017B000A9F06CF42130310509F442C02230310522
+:1017C00009F043C08DE690E024EF33E042C02132BF
+:1017D0003105C9F02232310519F137C0992781301E
+:1017E000910541F08230910541F0892B71F5E0EFD0
+:1017F000F3E005C0E8EDF3E002C0E0ECF3E0849133
+:1018000090E09F0126C0643000F5E62FF0E0EE0F77
+:10181000FF1FEE5DFE4F2081318189E090E019C00D
+:10182000643098F4E62FF0E0DF01AA0FBB1FA65E3C
+:10183000BE4F2D913C91EA5EFE4F808190E009C041
+:1018400082E190E021E634E004C080E090E020E016
+:1018500030E0FA0131832083089580E189BD82E17F
+:1018600089BD09B400FEFDCF8091D8008F7D8093A3
+:10187000D8008091E00082608093E0008091E000D9
+:1018800081FDFCCF0895CF92DF92EF92FF920F93EC
+:101890001F93CF93DF937C018B01EA010E94A50D7A
+:1018A000811131C0209731F088819981081B190B73
+:1018B000E80EF91EC12CD12C0115110519F18091EA
+:1018C000E80085FD14C08091E8008E778093E800E1
+:1018D000209741F0888199818C0D9D1D9983888383
+:1018E00085E011C00E94A50D882331F30CC0F701DB
+:1018F00081917F018093F10001501109FFEFCF1A10
+:10190000DF0ADACF80E0DF91CF911F910F91FF9036
+:10191000EF90DF90CF9008952091F3013091F40182
+:101920002617370748F06115710539F42091E80052
+:101930002E772093E80001C0B901FC0120E0611579
+:101940007105B9F18091EC01882309F440C085301C
+:1019500009F43FC08091E80083FD3DC08091E8001C
+:1019600082FF06C08091E80082FF26C080E00895D3
+:101970008091E80080FFE3CF2091F3008091F20096
+:1019800090E0922B6115710551F08830910538F483
+:1019900021912093F100615071090196F3CF21E06C
+:1019A000089709F020E08091E8008E778093E800A6
+:1019B000C6CF2111C7CFD6CF8091EC01882339F053
+:1019C000853039F08091E80083FFCCCF04C082E0FD
+:1019D000089583E0089581E008952091F301309106
+:1019E000F4012617370748F06115710539F4209185
+:1019F000E8002E772093E80001C0B901FC0120E047
+:101A000061157105C1F18091EC01882309F441C091
+:101A1000853009F440C08091E80083FD3EC080918C
+:101A2000E80082FF06C08091E80082FF27C080E0C6
+:101A300008958091E80080FFE3CF2091F30080912A
+:101A4000F20090E0922B6115710559F088309105F4
+:101A500040F424912093F100319661507109019670
+:101A6000F2CF21E0089709F020E08091E8008E771E
+:101A70008093E800C5CF2111C6CFD5CF8091EC016E
+:101A8000882339F0853039F08091E80083FFCBCF8F
+:101A900004C082E0089583E0089581E00895982FBE
+:101AA000973058F59093E900981739F07091EC0051
+:101AB0002091ED005091F00003C0242F762F50E0CC
+:101AC00021FF19C03091EB003E7F3093EB00309145
+:101AD000ED003D7F3093ED003091EB0031603093AD
+:101AE000EB007093EC002093ED005093F0002091F8
+:101AF000EE0027FF07C09F5FD3CF8F708093E90070
+:101B000081E0089580E008958091ED0187FD05C092
+:101B10008091E80080FF0EC012C08091E80082FD35
+:101B200005C08091EC018111F8CF08958091E80003
+:101B30008B7708C08091EC018111EACF08958091E4
+:101B4000E8008E778093E80008958091E4009091FA
+:101B5000E50045E62091EC0020FF21C02091E8003F
+:101B600020FD21C02091EC01222389F0253089F04D
+:101B70002091EB0025FD0FC02091E4003091E5009D
+:101B80002817390739F3415041F0C901E3CF82E00A
+:101B9000089583E0089581E0089584E008952091F8
+:101BA000E80022FFDFCF80E008950E94430E0E94EC
+:101BB0004B0EE0EEF0E0808181608083E8EDF0E0A4
+:101BC00080818F77808319BCA7EDB0E08C918E7FE8
+:101BD0008C9380818F7E80831092EB0108950F9308
+:101BE0001F93CF93DF930E94430E0E944B0EC8EDCC
+:101BF000D0E088818F778883888180688883888116
+:101C00008F7D888319BC1092EC011092E80110922C
+:101C1000EA011092E90100EE10E0F80180818B7F6B
+:101C2000808388818160888342E060E080E00E9458
+:101C30004F0DE1EEF0E080818E7F8083E2EEF0E0F8
+:101C4000808181608083808188608083F8018081C9
+:101C50008E7F8083888180618883DF91CF911F91FF
+:101C60000F910895E8EDF0E080818F7E8083E7EDAD
+:101C7000F0E080818160808384E082BF81E0809396
+:101C8000EB010C94EF0DE8EDF0E080818E7F808316
+:101C90001092E20008951092DA001092E100089587
+:101CA0001F920F920FB60F9211242F933F934F93D1
+:101CB0005F936F937F938F939F93AF93BF93EF93B4
+:101CC000FF938091E10082FF0BC08091E20082FFD0
+:101CD00007C08091E1008B7F8093E1000E94AC10EF
+:101CE0008091DA0080FF1FC08091D80080FF1BC068
+:101CF0008091DA008E7F8093DA008091D90080FF96
+:101D00000DC080E189BD82E189BD09B400FEFDCF2F
+:101D100081E08093EC010E94B40A05C019BC1092C6
+:101D2000EC010E94C20A8091E10080FF19C08091FD
+:101D3000E20080FF15C08091E2008E7F8093E20078
+:101D40008091E20080618093E2008091D8008062FF
+:101D50008093D80019BC85E08093EC010E94C60AEC
+:101D60008091E10084FF30C08091E20084FF2CC0AC
+:101D700080E189BD82E189BD09B400FEFDCF80917B
+:101D8000D8008F7D8093D8008091E1008F7E809372
+:101D9000E1008091E2008F7E8093E2008091E2007A
+:101DA00081608093E2008091E801882311F084E053
+:101DB00007C08091E30087FF02C083E001C081E09B
+:101DC0008093EC010E94C80A8091E10083FF29C042
+:101DD0008091E20083FF25C08091E100877F80939E
+:101DE000E10082E08093EC011092E8018091E10033
+:101DF0008E7F8093E1008091E2008E7F8093E200ED
+:101E00008091E20080618093E20042E060E080E047
+:101E10000E944F0D8091F00088608093F0000E9436
+:101E2000C50AFF91EF91BF91AF919F918F917F91E3
+:101E30006F915F914F913F912F910F900FBE0F9037
+:101E40001F9018951F920F920FB60F9211242F9387
+:101E50003F934F935F936F937F938F939F93AF9332
+:101E6000BF93CF93EF93FF93C091E900CF70809120
+:101E7000EC001092E9008091F000877F8093F000E1
+:101E800078940E945E0F1092E9008091F0008860C3
+:101E90008093F000C093E900FF91EF91CF91BF9143
+:101EA000AF919F918F917F916F915F914F913F91F2
+:101EB0002F910F900FBE0F901F9018951F93CF93E7
+:101EC000DF93CDB7DEB7AA970FB6F894DEBF0FBE8B
+:101ED000CDBFEDEEF1E08091F100819321E0E53F8F
+:101EE000F207C9F70E94E40A8091E80083FF1CC151
+:101EF0002091ED013091EE01832F90E08A30910521
+:101F000008F012C1FC01EC59FF4F0C941625203843
+:101F100081F0223809F008C18091F1018F7080931F
+:101F2000E9008091EB0085FB882780F91092E90099
+:101F300006C08091E9019091EA019111826090912F
+:101F4000E800977F9093E8008093F1001092F100F1
+:101F5000C5C0822F8D7F09F0E7C0222319F02230FF
+:101F600061F0E2C08091EF01813009F0DDC03330D3
+:101F700009F080E08093EA0128C08091EF0181118F
+:101F800024C02091F1012F7009F4CEC02093E90004
+:101F90008091EB0080FF19C08091EB00333011F489
+:101FA000806211C080618093EB0081E090E0022E9E
+:101FB00001C0880F0A94EAF78093EA001092EA00C1
+:101FC0008091EB0088608093EB001092E900809193
+:101FD000E800877F86C02111A7C01091EF011F770D
+:101FE0008091E3008078812B8093E3008091E8006A
+:101FF000877F8093E8000E94840D8091E80080FF35
+:10200000FCCF8091E30080688093E300112311F0FE
+:1020100083E001C082E08093EC0186C0205822302A
+:1020200008F082C08091EF019091F0018C3D23E097
+:10203000920779F583E08A838AE289834FB7F8941F
+:10204000DE01139620E03EE051E2E32FF0E05093F2
+:102050005700E49120FF03C0E295EF703F5FEF70FF
+:102060008E2F90E0EA3010F0C79601C0C0968D9395
+:102070009D932F5F243149F74FBF8091E800877F00
+:102080008093E8006AE270E0CE0101960E948C0C19
+:1020900014C0AE014F5F5F4F6091F1010E94D40BFD
+:1020A000009709F441C02091E800277F2093E800C1
+:1020B000BC0189819A810E94ED0C8091E8008B77A8
+:1020C0008093E80031C0203879F58091E800877F5F
+:1020D0008093E8008091E8018093F1008091E8000E
+:1020E0008E778093E8000E94840D1EC021111CC0D1
+:1020F0009091EF019230C0F48091E800877F809347
+:10210000E8009093E8010E94840D8091E80181111C
+:1021100004C08091E30087FF02C084E001C081E039
+:102120008093EC010E94D00A8091E80083FF0AC0EE
+:102130008091E800877F8093E8008091EB008062C7
+:102140008093EB00AA960FB6F894DEBF0FBECDBF0A
+:10215000DF91CF911F9108950895CF938091EC0165
+:102160008823B1F08091E9008F709091EC0090FF8E
+:1021700002C090E801C090E0C92FC82B1092E9007E
+:102180008091E80083FD0E945E0FCF70C093E9004C
+:10219000CF91089590937101809370010895E0911B
+:1021A0007001F0917101309721F00190F081E02DE4
+:1021B000099480E00895E0917001F09171013097E9
+:1021C00021F00280F381E02D09940895E0917001DF
+:1021D000F0917101309721F00480F581E02D099490
+:1021E000089520916E0130916F018217930771F06D
+:1021F00090936F0180936E01E0917001F0917101F5
+:10220000309721F00680F781E02D09940895209100
+:102210006C0130916D018217930771F090936D01FD
+:1022200080936C01E0917001F0917101309721F081
+:102230000084F185E02D0994089508950C941D11F2
+:102240000E94071D0E94F0050C94CD1DCF92DF92D5
+:10225000EF92FF920F931F93CF93DF93CDB7DEB72B
+:102260002B970FB6F894DEBF0FBECDBF0E940806B5
+:1022700033E7E32E31E0F32E00E010E0C02E802F94
+:102280000E94F506F701D1907F01D826B1F40F5FC7
+:102290001F4F0E30110591F78FEF89838A831B82C0
+:1022A0000E94101D8160782F9D838C8349815A8103
+:1022B0006B818D810E94C91141C09091D50191FF20
+:1022C00004C08B870E94FB068B8520E030E04D2DFB
+:1022D00050E0922FBA01022E02C0759567950A94BC
+:1022E000E2F760FF25C02E83CF82EE24E394F12C29
+:1022F00002C0EE0CFF1C9A95E2F790E08E219F2120
+:1023000021E0892B09F420E028870E94101D8160BC
+:10231000782F9A8789874E815F8168858A850E9498
+:10232000C911F801ED58FE4F80818E25808306C0CB
+:102330002F5F3F4F2630310561F6A9CF0E94B120B3
+:10234000109172010E94CF101817A1F00E94CF10B7
+:10235000809372012B960FB6F894DEBF0FBECDBFEF
+:10236000DF91CF911F910F91FF90EF90DF90CF9071
+:102370000C94D4092B960FB6F894DEBF0FBECDBFD8
+:10238000DF91CF911F910F91FF90EF90DF90CF9051
+:102390000895CF93DF93CDB7DEB72B970FB6F894A0
+:1023A000DEBF0FBECDBF4F83588769877A878B8783
+:1023B000DE01119686E0FD0111928A95E9F785E02C
+:1023C000FE01379601900D928A95E1F749815A8175
+:1023D0006B817C818D819E810E941E192B960FB688
+:1023E000F894DEBF0FBECDBFDF91CF910895089561
+:1023F000CF93C82F882309F4C1C0823859F40E94B2
+:10240000CF1081FDBBC089E30E94C81B0E94921CB3
+:1024100089E30CC0833879F40E94CF1080FDAEC0F0
+:1024200083E50E94C81B0E94921C83E50E94081C41
+:10243000CF910C94921C843859F40E94CF1082FDE5
+:102440009DC087E40E94C81B0E94921C87E4EECFC7
+:102450008CEF8C0F813A48F48C2F0E94E42281117A
+:102460008DC08C2F0E94C81BE3CF80E28C0F883078
+:1024700048F4C77081E001C0880FCA95EAF70E944E
+:10248000491CD6CF8BE58C0F833078F4C53A29F000
+:10249000C63A31F482E890E005C081E890E002C0DD
+:1024A00083E890E0CF910C94F11088E58C0F833194
+:1024B00008F064C0C83A39F1C93A41F1CA3A49F161
+:1024C000CB3A51F1CC3A59F1CD3A61F1C03B69F1C7
+:1024D000CE3A71F1CF3A79F1C13B81F1C23B89F13A
+:1024E000C33B91F1C43B99F1C53BA1F1C63BA9F1B6
+:1024F000C73BB1F1C83BB9F1C93BC1F1CA3BC9F512
+:102500008AE292E038C082EE90E035C089EE90E039
+:1025100032C08AEE90E02FC085EB90E02CC086EBB5
+:1025200090E029C087EB90E026C08CEC90E023C0BF
+:102530008DEC90E020C083E891E01DC08AE891E036
+:102540001AC082E991E017C084E991E014C081E2E9
+:1025500092E011C083E292E00EC084E292E00BC0F0
+:1025600085E292E008C086E292E005C087E292E050
+:1025700002C080E090E0CF910C940711CF910895B4
+:10258000882309F44BC0823859F40E94CF1081FF90
+:1025900045C089E30E94C81B0E94921C89E30CC0BD
+:1025A000833871F40E94CF1080FF38C083E50E9409
+:1025B000C81B0E94921C83E50E94081C0C94921C6C
+:1025C000843859F40E94CF1082FF28C087E40E940B
+:1025D000C81B0E94921C87E4EFCF9CEF980F913AA2
+:1025E00058F390E2980F983050F4877091E001C052
+:1025F000990F8A95EAF7892F0E944F1CDFCF9BE540
+:10260000980F933020F480E090E00C94F110885AF9
+:10261000833120F480E090E00C9407110895882322
+:1026200021F00E94491C0C94921C0895882321F0EB
+:102630000E944F1C0C94921C0895CF92DF92EF924F
+:10264000FF920F931F93CF93DF93CDB7DEB72897F9
+:102650000FB6F894DEBF0FBECDBF8C0185E0F80148
+:10266000DE01119601900D928A95E1F7F801D08074
+:10267000E180F280558152955F7023813481232B54
+:1026800039F0FFEFEF1206C081E0DF1203C003C094
+:1026900081E001C080E080FDE2C2C8015F830E944A
+:1026A000F711D982EA8269817A818F2D0E94C41B39
+:1026B0009E8388870E94781B0E944B1A4E815F81FF
+:1026C0006885FF2029F00E94661C68855F814E8125
+:1026D000E42FE295EF70F0E0E259FF4F0C941625DD
+:1026E000842F807F142F1F70882311F01295107F84
+:1026F000FF20B1F0112309F467C280E2860F883011
+:1027000028F4812F68870E94491C04C0812F6887A4
+:102710000E94591C688568870E94921C688554C273
+:10272000862F68870E94C0126885112309F497C21A
+:10273000605E812F683018F40E944F1C02C00E9416
+:102740005F1C28960FB6F894DEBF0FBECDBFDF9199
+:10275000CF911F910F91FF90EF90DF90CF900C944D
+:10276000921C242F207F842F8F70203211F08295AD
+:10277000807F662319F0613019F12BC0FF20B1F082
+:10278000552309F493C1513009F090C128960FB632
+:10279000F894DEBF0FBECDBFDF91CF911F910F9197
+:1027A000FF90EF90DF90CF900C94791C552319F097
+:1027B000513009F454C28E830E947C1C8E8189C1E1
+:1027C000FF2021F0523008F04AC270C1511147C2B7
+:1027D00080C1FF2021F0552309F468C1F5C15523BC
+:1027E00009F477C105C2242F26952695237030E081
+:1027F0002115310521F021303105C9F030C2FF200B
+:1028000021F0862F942F937002C080E090E02896EC
+:102810000FB6F894DEBF0FBECDBFDF91CF911F91F1
+:102820000F91FF90EF90DF90CF900C94F110FF206C
+:1028300021F0862F942F937002C080E090E02896BC
+:102840000FB6F894DEBF0FBECDBFDF91CF911F91C1
+:102850000F91FF90EF90DF90CF900C940711862F8F
+:10286000FF2019F00E94B91F02C00E942120289663
+:102870000FB6F894DEBF0FBECDBFDF91CF911F9191
+:102880000F91FF90EF90DF90CF900C94A620842FB3
+:10289000837009F076C0F110E2C1262F22952695AB
+:1028A0002770220F220F862F8F70C82ED12CE12C7B
+:1028B000F12C022E04C0CC0CDD1CEE1CFF1C0A9473
+:1028C000D2F764FF10C06FE070E080E090E004C0D9
+:1028D000660F771F881F991F2A95D2F7609570950C
+:1028E0008095909503C060E070E0CB01242F269581
+:1028F00026952370422F50E042305105D1F04330ED
+:10290000510559F16C297D298E299F2941305105A6
+:1029100041F128960FB6F894DEBF0FBECDBFDF9110
:10292000CF911F910F91FF90EF90DF90CF900C947B
-:10293000851A603FC9F118F4603E50F49BC0623FB5
-:1029400009F460C008F44AC0633F09F46FC092C044
-:10295000162F1F70842F8F71FF2099F00E941E1A6E
-:10296000812F28960FB6F894DEBF0FBECDBFDF9142
+:10293000701A6C297D298E299F2928960FB6F89444
+:10294000DEBF0FBECDBFDF91CF911F910F91FF90E2
+:10295000EF90DF90CF900C948A1A0E94701AC701F2
+:10296000B60128960FB6F894DEBF0FBECDBFDF913B
:10297000CF911F910F91FF90EF90DF90CF900C942B
-:1029800082120E943F1A812F28960FB6F894DEBF5C
-:102990000FBECDBFDF91CF911F910F91FF90EF90B0
-:1029A000DF90CF900C948912FF20A1F02111B2C0CA
-:1029B000842F8F7128960FB6F894DEBF0FBECDBF5F
-:1029C000DF91CF911F910F91FF90EF90DF90CF900B
-:1029D0000C94641A223008F09DC0EACFFF20A1F0C9
-:1029E000842F8F7128960FB6F894DEBF0FBECDBF2F
-:1029F000DF91CF911F910F91FF90EF90DF90CF90DB
-:102A00000C941E1AFF2061F3842F8F7128960FB645
+:10298000561AFF2019F0842F817001C08695882384
+:1029900009F465C1262F229526952770220F220F54
+:1029A000862F8F70C82ED12CE12CF12C022E04C062
+:1029B000CC0CDD1CEE1CFF1C0A94D2F764FF10C087
+:1029C0006FE070E080E090E004C0660F771F881F22
+:1029D000991F2A95D2F7609570958095909503C0C0
+:1029E00060E070E0CB01242F269526952370422FBE
+:1029F00050E042305105D1F04330510559F16C2976
+:102A00007D298E299F294130510541F128960FB625
:102A1000F894DEBF0FBECDBFDF91CF911F910F9114
-:102A2000FF90EF90DF90CF900C943F1AFF2091F031
-:102A3000842F8F7128960FB6F894DEBF0FBECDBFDE
+:102A2000FF90EF90DF90CF900C94441B6C297D2990
+:102A30008E299F2928960FB6F894DEBF0FBECDBF12
:102A4000DF91CF911F910F91FF90EF90DF90CF908A
-:102A50000C94091A28960FB6F894DEBF0FBECDBFAE
-:102A6000DF91CF911F910F91FF90EF90DF90CF906A
-:102A70000C94FF19FF20A1F0222309F4B1CF862F77
-:102A800028960FB6F894DEBF0FBECDBFDF91CF9171
-:102A90001F910F91FF90EF90DF90CF900C946B11EE
-:102AA000222309F4B1CF862F28960FB6F894DEBF03
-:102AB0000FBECDBFDF91CF911F910F91FF90EF908F
-:102AC000DF90CF900C9433124F70C8010E94A50480
-:102AD00028960FB6F894DEBF0FBECDBFDF91CF9121
-:102AE0001F910F91FF90EF90DF90CF900C942619DB
-:102AF0004F70C80128960FB6F894DEBF0FBECDBF49
-:102B0000DF91CF911F910F91FF90EF90DF90CF90C9
-:102B10000C94EA0728960FB6F894DEBF0FBECDBF1F
-:102B2000DF91CF911F910F91FF90EF90DF90CF90A9
-:102B300008950E94B41B0E94C41B0E94891B0E941E
-:102B4000E01B0E94F0200E94442080E090E00E9460
-:102B5000651080E090E00C947B100E94A41B0C9404
-:102B600099150E94D41A292F22952F7030E02C300D
-:102B700031054CF42A3031056CF4225031092230F1
-:102B8000310590F407C02C30310551F02F3031055C
-:102B900039F00AC0803E10F0803F31F481E00895A2
-:102BA00093FB882780F9089580E00895CF93DF9301
-:102BB00000D000D01F92CDB7DEB70F900F900F90CE
-:102BC0000F900F90DF91CF910895CF93DF9300D0B6
-:102BD00000D000D0CDB7DEB726960FB6F894DEBF92
-:102BE0000FBECDBFDF91CF9108951F93CF93DF9399
-:102BF000C091790116E080917A01C81799F0D0E070
-:102C00001C9FF0011D9FF00D1124E558FE4F4081DF
-:102C1000518162817381848195810E94E51521969D
-:102C2000C770E9CFDF91CF911F9108954091AB011B
-:102C30005091AC016091AD017091AE018091AF01F6
-:102C40009091B0010C94E515CF938091B0018295DD
-:102C50008F7009F05FC08091AD01882309F45AC0DC
-:102C600020917901A0917A016091AB017091AC0142
-:102C70008091AE019091AF0131E06F3F09F030E0FB
-:102C8000B32FC6E02A1709F445C0009721F07F3F13
-:102C900021F44B2F03C041E001C040E030E040FD93
-:102CA00035C0C29FF001C39FF00D1124E558FE4FBF
-:102CB000418174132BC04081641328C042814111AB
-:102CC00025C0438154814817590710F441505109D8
-:102CD000481B590B483C5105C8F48091B0018F70D6
-:102CE00080618093B00186E0829FF001839FF00DA8
-:102CF0001124E058FE4F80818F70806180838BEAC1
-:102D000091E00E949012CF910C94F5152F5F3F4FE8
-:102D10002770B8CFCF910895CF92DF92EF92FF92B4
-:102D20000F931F93CF93DF93CDB7DEB762970FB6A4
-:102D3000F894DEBF0FBECDBF8C0185E0F801DE0147
-:102D40001D9601900D928A95E1F7D8014C9111964C
-:102D50005C91119712966C9112971396ED90FC90DE
-:102D600014977091AB01E091AC012091AE013091CC
-:102D7000AF012115310531F0EF3F31F481E07F3FA4
-:102D800019F403C081E001C080E0B82FB170CB2EF0
-:102D900080FD6CC1D090AD01DD2009F4F5C0F0914B
-:102DA000B001E216F30638F0C701821B930B883C92
-:102DB000910548F09BC0209530952E0D3F1D283C75
-:102DC000310508F093C08F2F807F09F052C0E513C2
-:102DD00014C0741312C0D62E61110FC0FF70F061C1
-:102DE000F093B0010E9416168BEA91E00E949012B7
-:102DF0008091B001F80185836CC1EF2831F05F3F0D
-:102E000031F481E04F3F19F403C081E001C080E05C
-:102E100080FD03C081E0862701C080E0F82FF170BB
-:102E2000FF2E80FF1CC08091790120917A0136E04D
-:102E3000821709F428C190E0389FF001399FF00D06
-:102E40001124E558FE4F7181571306C07081471356
-:102E500003C07281671303C001968770E9CFD62E35
-:102E6000662309F436C18091B00181608093B0017E
-:102E700053C0E51308C0741306C0611104C0D80123
-:102E80001596FC93AEC04D875E878D859E856A8BB7
-:102E90000E94B1156A89882329F1D62E662311F183
-:102EA0002091B001822F82958F7090E002970CF4F0
-:102EB00060C08091AB019091AC0198878F83198697
-:102EC000FB86EA862C87CE01079651C0E51731F1C3
-:102ED0004D875E878D859E856A8B0E94B1156A89B4
-:102EE00081112EC0C8010E949012A4C08F2F807F34
-:102EF00069F77E2DF98AE88A89890E94D6158BEABE
-:102F000091E00E949012EBEAF1E086E0DF011D9271
-:102F10008A95E9F70E941616D12CDBC07413D8CF1E
-:102F20006111D6CFD8011596FC93C8010E9490126A
-:102F3000EBEAF1E086E0DF011D928A95E9F7C9C06E
-:102F4000D62E662379F22091B001822F82958F7060
-:102F500090E0029774F08091AB019091AC019A835C
-:102F600089831B82FD82EC822E83CE0101960E9412
-:102F7000901286E0F801ABEAB1E001900D928A95DB
-:102F8000E1F70E9424166FC0E216F30628F0C7018D
-:102F9000821B930B9C0104C0209530952E0D3F1D84
-:102FA000283C310508F052C0D62E662309F49ACF8A
-:102FB000E5132CC074132AC08091B00180FD1DC0A0
-:102FC000982F92959F70C9F0D80115968C931597FC
-:102FD0009F3039F09F5F9295907F8F70892B159667
-:102FE0008C93C8010E94901286E0F801ABEAB1E030
-:102FF00001900D928A95E1F736C086E0F801ABEAC0
-:10300000B1E001900D928A95E1F763C04D875E872C
-:103010008D859E850E94B115882379F086E0F801A0
-:10302000ABEAB1E001900D928A95E1F70E94241677
-:103030000E941616DD24D3944CC08091B0018160AB
-:103040008093B001C8010E94901243C07E2DF98A7E
-:10305000E88A89890E94D615EBEAF1E086E0DF0173
-:103060001D928A95E9F70E94161633C0662309F46B
-:1030700039CF4D875E878D859E850E94B115882347
-:1030800009F430CFCBCF4D875E878D859E850E941A
-:10309000D41A292F22952F7030E0223031052CF4DC
-:1030A0009F7041F0811106C00CC0243031052CF412
-:1030B0009F7049F4805E883020F0C8010E94901211
-:1030C000CF2CDC2C06C0D80115969C91907F91F7EF
-:1030D000F8CF8D2D62960FB6F894DEBF0FBECDBF30
-:1030E000DF91CF911F910F91FF90EF90DF90CF90E4
-:1030F00008951F93CF93DF93CDB7DEB72C970FB60C
-:10310000F894DEBF0FBECDBF4F83588769877A879B
-:103110008B879C87CE0107960E948C168823C1F06E
-:103120002F8138858A859B85892B31F03F3F11F0AF
-:1031300080E003C02F3FE1F781E0811147C04F815C
-:10314000588569857A858B859C850E94E5153EC0EA
-:1031500086E0FE013796DE01119601900D928A9568
-:10316000E1F7FF81E8854A855B854115510531F01E
-:10317000EF3F31F481E0FF3F19F403C081E001C06B
-:1031800080E080FD23C020917A0130E0C9010196E2
-:10319000877099276091790170E086179707F1F1A0
-:1031A000F983EA835D834C8396E0929FD001939FDD
-:1031B000B00D1124A558BE4FFE01319601900D921D
-:1031C0009A95E1F780937A010E94F51516E08091B7
-:1031D000790190917A01891779F1189FC001112422
-:1031E00085589E4F0E948C16882331F1E091790119
-:1031F0001E9FF0011124E558FE4F408151816281EC
-:103200007381848195810E94E5158091790190E018
-:1032100001968770992780937901D9CF0E94AD15C7
-:1032200010927A0110927901EBEAF1E086E0DF0179
-:103230001D928A95E9F7CACF2C960FB6F894DEBF97
-:103240000FBECDBFDF91CF911F910895EF92FF92F6
-:103250000F931F93CF93DF93FC01009709F46FC086
-:10326000F12CEE24E394EF0121968491843740F40D
-:10327000843008F055C0813081F0823021F15FC088
-:10328000853709F447C0C0F19CE7980F903708F0E4
-:1032900056C08F770E94331245C08F010E5F1F4FBB
-:1032A000FE01849190E2980F983050F48770FE2DC3
-:1032B00001C0FF0F8A95EAF78F2F0E94B71B15C038
-:1032C0000E946B1114C08F010E5F1F4FFE0184918D
-:1032D00090E2980F983068F48770FE2D01C0FF0FC0
-:1032E0008A95EAF78F2F0E94BD1B0E94E01BE80120
-:1032F00019C00E943312FBCFCF010296FE01C49188
-:10330000CC2361F0EFE9FFE03197F1F700C0000056
-:10331000C150F6CFCF010296FE01F490EC0102C03D
-:103320000E946B118F2D882341F0EFE9FFE0319768
-:10333000F1F700C000008150F6CFFE0194CFDF917D
-:10334000CF911F910F91FF90EF9008950895609392
-:10335000B5017093B6018093B7019093B8010C94B6
-:1033600099150F931F930091B5011091B60120910B
-:10337000B7013091B801062B172B282B392B00935E
-:10338000B5011093B6012093B7013093B8011F9196
-:103390000F910C9499150F931F930091B501109103
-:1033A000B6012091B7013091B801062317232823D5
-:1033B00039230093B5011093B6012093B7013093E0
-:1033C000B8011F910F910C9499150F931F930091C1
-:1033D000B5011091B6012091B7013091B8010627CF
-:1033E0001727282739270093B5011093B60120939A
-:1033F000B7013093B8011F910F910C949915109259
-:10340000B1011092B2011092B3011092B4010C9468
-:10341000991541E050E060E070E004C0440F551F92
-:10342000661F771F8A95D2F74093B1015093B2017E
-:103430006093B3017093B4010C94991541E050E08E
-:1034400060E070E004C0440F551F661F771F8A9527
-:10345000D2F78091B1019091B201A091B301B091E6
-:10346000B401842B952BA62BB72B8093B10190939D
-:10347000B201A093B301B093B4010C94991541E04B
-:1034800050E060E070E004C0440F551F661F771FD6
-:103490008A95D2F740955095609570958091B101CD
-:1034A0009091B201A091B301B091B401842395230E
-:1034B000A623B7238093B1019093B201A093B301E7
-:1034C000B093B4010C94991541E050E060E070E0D5
-:1034D00004C0440F551F661F771F8A95D2F780914D
-:1034E000B1019091B201A091B301B091B4018427D0
-:1034F0009527A627B7278093B1019093B201A09397
-:10350000B301B093B4010C9499150F931F930091DC
-:10351000B1011091B2012091B3013091B401062B99
-:10352000172B282B392B0093B1011093B201209354
-:10353000B3013093B4011F910F910C9499150F931F
-:103540001F930091B1011091B2012091B30130910C
-:10355000B40106231723282339230093B1011093C4
-:10356000B2012093B3013093B4011F910F910C94D9
-:1035700099150F931F930091B1011091B201209101
-:10358000B3013091B4010627172728273927009364
-:10359000B1011093B2012093B3013093B4011F9194
-:1035A0000F910C9499150895CF92DF92EF92FF92AC
-:1035B0000F931F93CF93DF93EC01C090B501D09090
-:1035C000B601E090B701F090B8018091B1019091FF
-:1035D000B201A091B301B091B401C82AD92AEA2A54
-:1035E000FB2A0FE110E0B701A601002E04C076957A
-:1035F0006795579547950A94D2F740FF07C0BE01DB
-:10360000802F0E940D088130910539F40150110975
-:1036100050F7BE0180E00E940D08DF91CF911F910D
-:103620000F91FF90EF90DF90CF90089590910C0153
-:103630009923D9F090910D019923B9F0982F96957F
-:10364000969596959F3088F5E0910E01F0910F01C7
-:10365000E90FF11D877021E030E001C0220F8A954B
-:10366000EAF78181822B8183089540910E01509168
-:103670000F0120E030E09FEFFA01E20FF31F6281BB
-:10368000681799F09F3F19F4611101C0922F2F5FC5
-:103690003F4F2E30310581F79F3F39F0FA01E90F96
-:1036A000F11D97FDFA9582830895089590910C017C
-:1036B0009923E1F090910D019923C1F0982F9695EF
-:1036C000969596959F3020F5E0910E01F0910F01AF
-:1036D000E90FF11D877021E030E001C0220F8A95CB
-:1036E000EAF72095818128232183089540910E01D6
-:1036F00050910F0120E030E0FA01E20FF31F9281B8
-:10370000981301C012822F5F3F4F2E303105A1F771
-:10371000089581E090E0E0910E01F0910F01E80F33
-:10372000F91F1082019680319105A9F708959091B3
-:10373000CC01982B9093CC01089580959091CC0169
-:1037400098239093CC0108951092CC010895909104
-:10375000CB01982B9093CB01089580959091CB014C
-:1037600098239093CB0108951092CB0108959091E6
-:10377000CA01982B9093CA01089580959091CA012F
-:1037800098239093CA0108951092CA0108958093D6
-:10379000B90108951092B901089540910E01509118
-:1037A0000F0120E030E080E0FA01E20FF31F918189
-:1037B00091118F5F2F5F3F4F2F303105A9F708958B
-:1037C000E0910E01F0910F018091CC018083E09196
-:1037D0000E01F0910F0180819091CB01892B8083A4
-:1037E000E0910E01F0910F0180819091CA01892B27
-:1037F00080839091B901992361F0E0910E01F091DD
-:103800000F018081892B80830E94CD1B8111109232
-:10381000B90180910E0190910F010C944F10CF923D
-:10382000DF92EF92FF920F931F936C01EE24FF241F
-:10383000C114D104E104F10421F46B017C0180E0A6
-:1038400001C080E133272F2D1E2D0D2D01151105EF
-:103850002105310519F0885F68017901970186011A
-:10386000A4E03695279517950795AA95D1F70115E8
-:1038700011052105310519F08C5F68017901970167
-:103880008601F2E03695279517950795FA95D1F7B9
-:10389000011511052105310519F08E5F68017901C7
-:1038A000B701A6017695679557954795452B462B09
-:1038B000472B09F08F5F1F910F91FF90EF90DF90E2
-:1038C000CF9008958091E601843009F11092CE01E5
-:1038D00020E488E190E00FB6F894A895809360000A
-:1038E0000FBE2093600083B7817F846083BF83B75E
-:1038F000816083BF7894889583B78E7F83BF88E18A
-:103900000FB6F89480936000109260000FBE089587
-:1039100008950895CF930E94881C0E9437060E9444
-:10392000891CC0E08C2F0E942407811105C0CF5F45
-:10393000CE30C1F780E001C081E0CF9108950E94B0
-:10394000AD150E9443100C94480982E084BD93E0B9
-:1039500095BD9AEF97BD80936E0008952FB7F894A8
-:103960008091CF019091D001A091D101B091D2016D
-:103970002FBF0895CF92DF92EF92FF920F931F9384
-:103980002FB7F8944091CF015091D0016091D101AF
-:103990007091D2012FBF6A017B01EE24FF248C01BC
-:1039A00020E030E0C016D106E206F30610F44150E4
-:1039B0005109481B590BCA011F910F91FF90EF90BD
-:1039C000DF90CF9008951F920F920FB60F9211249F
-:1039D0008F939F93AF93BF938091CF019091D0012C
-:1039E000A091D101B091D2010196A11DB11D80938A
-:1039F000CF019093D001A093D101B093D201BF9198
-:103A0000AF919F918F910F900FBE0F901F901895BF
-:103A10000E94490DF8942FEF87EA91E621508040EB
-:103A20009040E1F700C0000087E090EBDC0180935C
-:103A3000EF019093F001A093F101B093F2012CE01B
-:103A400088E190E00FB6F894A895809360000FBECF
-:103A500020936000FFCFEF92FF920F931F93CF93BD
-:103A6000DF93E82EF12C8F2D0E942407C0E0D0E0D8
-:103A7000082F10E098010C2E02C0359527950A9466
-:103A8000E2F720FD05C02196C630D10599F709C09F
-:103A90006C2F7F2D80E00E94EB07E812F4CF81E0CD
-:103AA00005C0F3948EE0F812DECF80E0DF91CF9175
-:103AB0001F910F91FF90EF900895CF93C82F8CE244
-:103AC0000E942B1D882321F08C2FCF910C942B1D4D
-:103AD00080E0CF910895CF930E94B01E811102C063
-:103AE0000E94961EC5E6C15049F00E9437068FE33A
-:103AF0009CE90197F1F700C00000F5CF89E20E9430
-:103B00005D1D811111C18AE20E945D1D81110E941B
-:103B1000961E85E00E945D1D81110E94081D0E9475
-:103B2000BB1E8093CD0187E00E945D1D882399F123
-:103B30008BE10E945D1D882351F09091CD0191FB96
-:103B4000882780F921E0822780FB91F922C08EE04E
-:103B50000E945D1D882351F09091CD0192FB882732
-:103B600080F921E0822780FB92F913C080E10E9456
-:103B70005D1D9091CD01882341F093FB882780F94A
-:103B800021E0822780FB93F904C0892F809580FB78
-:103B900090F99093CD018091CD010E94BF1E0E94AB
-:103BA000CD1E8093E00180EE0E945D1D882341F0D0
-:103BB0008091E001982F909590FB80F98093E0012F
-:103BC00089E30E945D1D882359F09091E00191FBEB
-:103BD000882780F921E0822780FB91F99093E0010A
-:103BE00082EE0E945D1D882359F09091E00192FBC6
-:103BF000882780F921E0822780FB92F99093E001E9
-:103C000086EE0E945D1D882359F09091E00193FBA0
-:103C1000882780F921E0822780FB93F99093E001C7
-:103C200083EE0E945D1D882359F09091E00194FB82
-:103C3000882780F921E0822780FB94F99093E001A6
-:103C400085E30E945D1D882359F09091E00195FB6A
-:103C5000882780F921E0822780FB95F99093E00185
-:103C600081E30E945D1D882359F09091E00196FB4D
-:103C7000882780F921E0822780FB96F99093E00164
-:103C800081E10E945D1D882359F09091E00197FB2E
-:103C9000882780F921E0822780FB97F99093E00143
-:103CA0008091E0010E94D11E8091E00187FB88276E
-:103CB00080F980930D0187E20E945D1DC82F8EE17F
-:103CC0000E945D1D8111C2608FE10E945D1D811106
-:103CD000C46080E20E945D1D8111C86081E20E9483
-:103CE0005D1D8111C06182E20E945D1D8111C06273
-:103CF00083E20E945D1D8111C06484E20E945D1D0B
-:103D0000882311F0C06802C0CC2329F08C2F0E94B8
-:103D1000C81E6C2F03C00E94C41E682F70E080E094
-:103D200090E0CF910C94A719CF9108956DEE7EEF9E
-:103D300080E090E00E94EC2460E082E090E00E944D
-:103D4000DE2460E083E090E00E94DE2460E084E016
-:103D500090E00E94DE2460E085E090E00C94DE2498
-:103D600080E090E00E94D82421E08D3E9E4F09F033
-:103D700020E0822F089582E090E00C94D024682FF8
-:103D800082E090E00C94DE2483E090E00C94D02458
-:103D9000682F83E090E00C94DE2484E090E00C94A3
-:103DA000D024682F84E090E00C94DE248091D5012B
-:103DB00080FF0BC06091130185E0689FB001112462
-:103DC00075956795759567952AC081FF09C06091C3
-:103DD000130185E0689FB0011124759567951FC098
-:103DE00082FF07C06091130185E0689FB001112434
-:103DF00016C04091D6014423C9F0609112014617C4
-:103E000088F72091130185E0289F90011124429F9B
-:103E1000C001439F900D112470E00E94A2246038DD
-:103E2000710540F46115710539F002C065E070E07C
-:103E3000862F08958FE7089581E008958091D50138
-:103E400080FF08C06091110170E0759567957595C8
-:103E5000679521C081FF06C06091110170E07595E2
-:103E6000679519C082FF04C06091110170E010C015
-:103E70008091D6018823C1F0609110018617A0F7C8
-:103E800090911101989FC001112470E00E94A2241A
-:103E90006038710528F46115710521F0862F0895A9
-:103EA0008FE7089581E0089561E070E0F4CF803FEE
-:103EB00021F40E94D61E819504C0813F29F40E94FE
-:103EC000D61E8093D9010895823F21F40E94D61E08
-:103ED000819504C0833F29F40E94D61E8093D801A7
-:103EE0000895893F19F40E941E1F05C08A3F31F4CE
-:103EF0000E941E1F81958093DA0108958B3F21F463
-:103F00000E941E1F819504C08C3F29F40E941E1F31
-:103F10008093DB010895843F21F48091D701816073
-:103F200017C0853F21F48091D701826011C0863F80
-:103F300021F48091D70184600BC0873F21F48091E8
-:103F4000D701886005C0883F31F48091D701806136
-:103F50008093D70108958D3F21F48091D501816030
-:103F60000BC08E3F21F48091D501826005C08F3F48
-:103F700029F48091D50184608093D5010895803F14
-:103F800039F48091D90187FF6CC01092D90169C0C2
-:103F9000813F29F48091D9011816BCF362C0909139
-:103FA000D801823F29F497FF5CC01092D80159C014
-:103FB000833F19F41916CCF354C0893F41F4809122
-:103FC000DA0118160CF04DC01092DA014AC08A3F8F
-:103FD00029F48091DA0187FF44C0F6CF8B3F39F492
-:103FE0008091DB0187FF3DC01092DB013AC08C3F1E
-:103FF00029F48091DB011816BCF333C0843F21F40F
-:104000008091D7018E7F17C0853F21F48091D70121
-:104010008D7F11C0863F21F48091D7018B7F0BC02B
-:10402000873F21F48091D701877F05C0883F31F415
-:104030008091D7018F7E8093D70113C08D3F21F4EB
-:104040008091D5018E7F0BC08E3F21F48091D501E8
-:104050008D7F05C08F3F29F48091D5018B7F8093A0
-:10406000D5018091D80181110EC08091D9018111B3
-:104070000AC08091DA01811106C08091DB018111B3
-:1040800002C01092D601089587ED91E00E945A1067
-:104090000E94AE1C9093D4018093D30108951F9386
-:1040A000CF93DF938091D3019091D4010E94BA1CE9
-:1040B0004091D601442321F02091140130E006C044
-:1040C000209115015AE0259F900111248217930732
-:1040D00008F482C08091D8011091D901D091DA0101
-:1040E000C091DB01811107C0111105C0D11103C0BE
-:1040F000CC2309F471C04F3F19F04F5F4093D601B4
-:10410000181624F40E94D61E8093D8018091D801FD
-:1041100087FF05C00E94D61E81958093D801111695
-:1041200024F40E94D61E8093D9018091D90187FF83
-:1041300005C00E94D61E81958093D9016091D80157
-:10414000662339F11091D901112319F1772767FD01
-:104150007095872F972F0E94B32323E333E343E324
-:104160005FE30E9417240E9480236093D801612F8F
-:10417000772767FD7095872F972F0E94B32323E33E
-:1041800033E343E35FE30E9417240E94802360939C
-:10419000D9011D1624F40E941E1F8093DA0180911C
-:1041A000DA0187FF05C00E941E1F81958093DA0106
-:1041B0001C1624F40E941E1F8093DB018091DB01FA
-:1041C00087FF05C00E941E1F81958093DB01DF9150
-:1041D000CF911F910C944420DF91CF911F910895AE
-:1041E000E7EDF1E085E0DF011D928A95E9F7109295
-:1041F000D6011092D5010895833081F128F48130E1
-:1042000059F08230D1F00895853009F449C0B8F1F1
-:10421000863009F456C0089520911501862F90E04C
-:10422000820F911D8F3F910520F4620F609315015D
-:1042300008958FEF80931501089520911401862F22
-:1042400090E0820F911D8F3F910520F4620F6093E3
-:10425000140108958FEF80931401089520911301A4
-:10426000862F90E0820F911D8F3F910520F4620F01
-:104270006093130108958FEF8093130108952091A7
-:104280001201862F90E0820F911D8F3F910520F43F
-:10429000620F6093120108958FEF809312010895C9
-:1042A00020911101862F90E0820F911D8F3F910583
-:1042B00020F4620F6093110108958FEF8093110134
-:1042C000089520911001862F90E0820F911D8F3F5D
-:1042D000910520F4620F6093100108958FEF809391
-:1042E00010010895833011F128F4813049F08230B3
-:1042F00091F00895853081F120F18630C1F1089563
-:1043000080911501681720F4861B8093150108958C
-:1043100010921501089580911401681720F4861BEE
-:10432000809314010895109214010895809113014F
-:10433000681720F4861B80931301089510921301CF
-:10434000089580911201681720F4861B8093120152
-:10435000089510921201089580911101681720F4B8
-:10436000861B809311010895109211010895809188
-:104370001001681720F4861B809310010895109295
-:10438000100108958D3109F442C020F58E3009F4F2
-:1043900079C070F4873009F45EC020F4863009F4E7
-:1043A00042C033C08830D1F18B3009F4A7C02DC092
-:1043B000863109F4A3C038F4803109F46DC081312D
-:1043C00009F47BC022C0893109F498C08B3109F40B
-:1043D0004FC01BC0853309F479C048F4873209F413
-:1043E00075C008F478C0893209F470C00EC08334F7
-:1043F00038F48A3308F071C0883309F47FC005C0EF
-:10440000833409F463C08834C1F080E008950E94C9
-:104410003A230E9443100E94480970C00E94BB1EAC
-:104420000E94CD1E6BC08091CD01817F8E7F8093D5
-:10443000CD0181E08093DD0108950E94AD152FEF3D
-:1044400083ED90E3215080409040E1F700C00000F0
-:104450000E94081D53C09091CD01892F817090FF5B
-:1044600003C0917F9E7F26C091609093CD0146C08E
-:104470009091CD0191FB882780F921E0822780FB74
-:1044800091F913C09091CD0192FB882780F921E02A
-:10449000822780FB92F909C09091CD0193FB882778
-:1044A00080F921E0822780FB93F99093CD01882346
-:1044B00029F191609093CD0108950E94AD158091EE
-:1044C0000D0191E0892780930D0118C061E070E033
-:1044D00080E090E00FC023EE01C027EC280F61E0E0
-:1044E00070E080E090E004C0660F771F881F991F7E
-:1044F0002A95D2F70E94A7190E94AD1581E0089570
-:1045000080E0089580E00895CF93C82F8091DD0169
-:10451000813079F018F08230D1F184C0A0910E0181
-:10452000B0910F018C91813169F0823209F07CC029
-:1045300009C0A0910E01B0910F018C91813111F051
-:10454000823249F48C2F0E94802281111DC08C2F51
-:104550000E94C2211AC08C2F0E948222811114C095
-:10456000C43179F048F4CB3079F0C03109F060C043
-:1045700082E08093DD0108C0C93219F0C83321F010
-:1045800057C01092DD0154C081E0817053C0C93220
-:1045900089F118F5C43171F1A8F4C73009F046C0AB
-:1045A0008AE08093150194E19093140193E0909335
-:1045B00013018093120188E08093110188E28093B7
-:1045C000100134C0CE51C63088F5EC2FF0E0E65D26
-:1045D000FE4F80818093DC0129C0CE34E9F020F4C5
-:1045E000CB3421F56AE013C0C13579F0C235F1F45E
-:1045F00061E00DC08091DC01882319F01092DC018C
-:1046000015C081E08093DD0115C061E006C0809196
-:10461000DC010E94FC200AC06AE08091DC010E945B
-:10462000722104C01092DD0180E004C081E002C06C
-:1046300080E0ABCFCF910895E1E8F0E08081886021
-:1046400080838081816080838FB7F89493E090931A
-:10465000890090ED909388008FBF0895EFE6F0E019
-:104660008081826080830895EFE6F0E080818D7F15
-:1046700080830895EFE6F0E0808192E089278083CF
-:1046800008951F920F920FB60F9211242F933F930C
-:104690004F935F936F937F938F939F93AF93BF934A
-:1046A000EF93FF938091DE019091DF01019690934B
-:1046B000DF018093DE01811103C082E00E9448097E
-:1046C000E091DF01E695E695F0E0E258F74FE491DE
-:1046D0008091DE018E1303C080E00E944809FF91A3
-:1046E000EF91BF91AF919F918F917F916F915F916A
-:1046F0004F913F912F910F900FBE0F901F901895E3
-:1047000004D06894B1118DC0089570D088F09F577F
-:1047100090F0B92F9927B751A0F0D1F0660F771F0D
-:10472000881F991F1AF0BA95C9F712C0B13081F0ED
-:1047300077D0B1E0089574C0672F782F8827B85FCD
-:1047400039F0B93FCCF3869577956795B395D9F74E
-:104750003EF490958095709561957F4F8F4F9F4F58
-:104760000895E89409C097FB3EF490958095709564
-:1047700061957F4F8F4F9F4F9923A9F0F92F96E9AD
-:10478000BB279395F695879577956795B795F11122
-:10479000F8CFFAF4BB0F11F460FF1BC06F5F7F4FBF
-:1047A0008F4F9F4F16C0882311F096E911C07723D1
-:1047B00021F09EE8872F762F05C0662371F096E8DA
-:1047C000862F70E060E02AF09A95660F771F881FA9
-:1047D000DAF7880F9695879597F9089557FD9058C1
-:1047E000440F551F59F05F3F71F04795880F97FBB5
-:1047F000991F61F09F3F79F087950895121613066F
-:104800001406551FF2CF4695F1DF08C0161617069D
-:104810001806991FF1CF86957105610508940895D2
-:10482000E894BB2766277727CB0197F908950BD02B
-:1048300078C069D028F06ED018F0952309F05AC0DE
-:104840005FC01124EECFCADFA0F3959FD1F3950F7F
-:1048500050E0551F629FF001729FBB27F00DB11D04
-:10486000639FAA27F00DB11DAA1F649F6627B00D94
-:10487000A11D661F829F2227B00DA11D621F739F7D
-:10488000B00DA11D621F839FA00D611D221F749F8B
-:104890003327A00D611D231F849F600D211D822FD2
-:1048A000762F6A2F11249F5750408AF0E1F0882319
-:1048B0004AF0EE0FFF1FBB1F661F771F881F915026
-:1048C0005040A9F79E3F510570F014C0AACF5F3F3A
-:1048D000ECF3983EDCF3869577956795B795F79559
-:1048E000E7959F5FC1F7FE2B880F911D96958795E1
-:1048F00097F9089597F99F6780E870E060E0089560
-:104900009FEF80EC089500240A94161617061806E7
-:104910000906089500240A941216130614060506C3
-:104920000895092E0394000C11F4882352F0BB0F54
-:1049300040F4BF2B11F460FF04C06F5F7F4F8F4FB7
-:104940009F4F089597FB072E16F4009407D077FD2C
-:1049500009D00E94BC2407FC05D03EF490958195B7
-:104960009F4F0895709561957F4F0895EE0FFF1F3B
-:104970000590F491E02D0994AA1BBB1B51E107C0DF
-:10498000AA1FBB1FA617B70710F0A61BB70B881FDF
-:10499000991F5A95A9F780959095BC01CD0108956E
-:1049A000F999FECF92BD81BDF89A992780B50895F7
-:1049B000A8E1B0E042E050E00C94F324262FF999EE
-:1049C000FECF1FBA92BD81BD20BD0FB6F894FA9AF2
-:1049D000F99A0FBE019608950E94DE24272F0C94A9
-:1049E000DF24DC01CB01FC01F999FECF06C0F2BD4A
-:1049F000E1BDF89A319600B40D9241505040B8F79D
-:064A00000895F894FFCFB9
-:104A060020024A09D709B40980094D090101BA01F2
-:104A160028080A03140A3F4D36393F08F207BC0737
-:104A2600830716072F0748076107010203040506D7
-:044A36000708090064
+:102A50000C945E1B0E94441BC701B60128960FB65A
+:102A6000F894DEBF0FBECDBFDF91CF911F910F91C4
+:102A7000FF90EF90DF90CF900C942A1B603FC9F13C
+:102A800018F4603E50F49BC0623F09F460C008F443
+:102A90004AC0633F09F46FC092C0162F1F70842F85
+:102AA0008F71FF2099F00E94C31A812F28960FB6CC
+:102AB000F894DEBF0FBECDBFDF91CF911F910F9174
+:102AC000FF90EF90DF90CF900C940F130E94E41AC8
+:102AD000812F28960FB6F894DEBF0FBECDBFDF91D1
+:102AE000CF911F910F91FF90EF90DF90CF900C94BA
+:102AF0001613FF20A1F05111B2C0842F8F712896B8
+:102B00000FB6F894DEBF0FBECDBFDF91CF911F91FE
+:102B10000F91FF90EF90DF90CF900C94091B5230F3
+:102B200008F09DC0EACFFF20A1F0842F8F71289676
+:102B30000FB6F894DEBF0FBECDBFDF91CF911F91CE
+:102B40000F91FF90EF90DF90CF900C94C31AFF206D
+:102B500061F3842F8F7128960FB6F894DEBF0FBEF5
+:102B6000CDBFDF91CF911F910F91FF90EF90DF903C
+:102B7000CF900C94E41AFF2091F0842F8F71289647
+:102B80000FB6F894DEBF0FBECDBFDF91CF911F917E
+:102B90000F91FF90EF90DF90CF900C94AE1A289693
+:102BA0000FB6F894DEBF0FBECDBFDF91CF911F915E
+:102BB0000F91FF90EF90DF90CF900C94A41AFF201C
+:102BC000A1F0552309F4B1CF862F28960FB6F894BB
+:102BD000DEBF0FBECDBFDF91CF911F910F91FF9050
+:102BE000EF90DF90CF900C94F811552309F4B1CFFA
+:102BF000862F28960FB6F894DEBF0FBECDBFDF91AB
+:102C0000CF911F910F91FF90EF90DF90CF900C9498
+:102C1000C0124F70C8010E941D0328960FB6F89489
+:102C2000DEBF0FBECDBFDF91CF911F910F91FF90FF
+:102C3000EF90DF90CF900C94CB194F70C80128967D
+:102C40000FB6F894DEBF0FBECDBFDF91CF911F91BD
+:102C50000F91FF90EF90DF90CF900C94FC06289698
+:102C60000FB6F894DEBF0FBECDBFDF91CF911F919D
+:102C70000F91FF90EF90DF90CF9008950E94661C17
+:102C80000E94761C0E943B1C0E94921C0E945221B2
+:102C90000E94A62080E090E00E94F11080E090E089
+:102CA0000C9407110E94561C0C943E160E94B91BEE
+:102CB000292F22952F7030E02C3031054CF42A302A
+:102CC00031056CF4225031092230310590F407C0EF
+:102CD0002C30310551F02F30310539F00AC0803EDB
+:102CE00010F0803F31F481E0089593FB882780F94C
+:102CF000089580E00895CF93DF9300D000D01F9215
+:102D0000CDB7DEB70F900F900F900F900F90DF911F
+:102D1000CF910895CF93DF9300D000D000D0CDB7EE
+:102D2000DEB726960FB6F894DEBF0FBECDBFDF919B
+:102D3000CF9108951F93CF93DF93C091810116E047
+:102D400080918201C81799F0D0E01C9FF0011D9F6F
+:102D5000F00D1124ED57FE4F408151816281738146
+:102D6000848195810E948A162196C770E9CFDF91F0
+:102D7000CF911F9108954091B3015091B40160919A
+:102D8000B5017091B6018091B7019091B8010C9492
+:102D90008A16CF938091B80182958F7009F05FC039
+:102DA0008091B501882309F45AC020918101A09136
+:102DB00082016091B3017091B4018091B60190914C
+:102DC000B70131E06F3F09F030E0B32FC6E02A17BA
+:102DD00009F445C0009721F07F3F21F44B2F03C039
+:102DE00041E001C040E030E040FD35C0C29FF0014D
+:102DF000C39FF00D1124ED57FE4F418174132BC07A
+:102E00004081641328C04281411125C0438154810F
+:102E10004817590710F441505109481B590B483CB9
+:102E20005105C8F48091B8018F7080618093B8011A
+:102E300086E0829FF001839FF00D1124E857FE4F3A
+:102E400080818F708061808383EB91E00E941D13ED
+:102E5000CF910C949A162F5F3F4F2770B8CFCF9128
+:102E60000895CF92DF92EF92FF920F931F93CF932B
+:102E7000DF93CDB7DEB762970FB6F894DEBF0FBE13
+:102E8000CDBF8C0185E0F801DE011D9601900D9209
+:102E90008A95E1F7D8014C9111965C9111971296A1
+:102EA0006C9112971396ED90FC9014977091B3016A
+:102EB000E091B4012091B6013091B701211531059F
+:102EC00031F0EF3F31F481E07F3F19F403C081E03E
+:102ED00001C080E0B82FB170CB2E80FD6CC1D090C6
+:102EE000B501DD2009F4F5C0F091B801E216F30652
+:102EF00038F0C701821B930B883C910548F09BC0BA
+:102F0000209530952E0D3F1D283C310508F093C0CB
+:102F10008F2F807F09F052C0E51314C0741312C0C4
+:102F2000D62E61110FC0FF70F061F093B8010E94BE
+:102F3000BB1683EB91E00E941D138091B801F8014C
+:102F400085836CC1EF2831F05F3F31F481E04F3F62
+:102F500019F403C081E001C080E080FD03C081E07E
+:102F6000862701C080E0F82FF170FF2E80FF1CC083
+:102F7000809181012091820136E0821709F428C1F5
+:102F800090E0389FF001399FF00D1124ED57FE4F6E
+:102F90007181571306C07081471303C07281671394
+:102FA00003C001968770E9CFD62E662309F436C197
+:102FB0008091B80181608093B80153C0E51308C0C7
+:102FC000741306C0611104C0D8011596FC93AEC0FD
+:102FD0004D875E878D859E856A8B0E9456166A890D
+:102FE000882329F1D62E662311F12091B801822F72
+:102FF00082958F7090E002970CF460C08091B301CD
+:103000009091B40198878F831986FB86EA862C8776
+:10301000CE01079651C0E51731F14D875E878D854A
+:103020009E856A8B0E9456166A8981112EC0C8013E
+:103030000E941D13A4C08F2F807F69F77E2DF98A0F
+:10304000E88A89890E947B1683EB91E00E941D1318
+:10305000E3EBF1E086E0DF011D928A95E9F70E943B
+:10306000BB16D12CDBC07413D8CF6111D6CFD801D9
+:103070001596FC93C8010E941D13E3EBF1E086E076
+:10308000DF011D928A95E9F7C9C0D62E662379F231
+:103090002091B801822F82958F7090E0029774F092
+:1030A0008091B3019091B4019A8389831B82FD8240
+:1030B000EC822E83CE0101960E941D1386E0F8015A
+:1030C000A3EBB1E001900D928A95E1F70E94C91639
+:1030D0006FC0E216F30628F0C701821B930B9C0118
+:1030E00004C0209530952E0D3F1D283C310508F079
+:1030F00052C0D62E662309F49ACFE5132CC0741360
+:103100002AC08091B80180FD1DC0982F92959F70B4
+:10311000C9F0D80115968C9315979F3039F09F5FB1
+:103120009295907F8F70892B15968C93C8010E9481
+:103130001D1386E0F801A3EBB1E001900D928A9592
+:10314000E1F736C086E0F801A3EBB1E001900D9203
+:103150008A95E1F763C04D875E878D859E850E94C5
+:103160005616882379F086E0F801A3EBB1E00190D0
+:103170000D928A95E1F70E94C9160E94BB16DD24C4
+:10318000D3944CC08091B80181608093B801C8018C
+:103190000E941D1343C07E2DF98AE88A89890E9406
+:1031A0007B16E3EBF1E086E0DF011D928A95E9F7FB
+:1031B0000E94BB1633C0662309F439CF4D875E8762
+:1031C0008D859E850E945616882309F430CFCBCF7B
+:1031D0004D875E878D859E850E94B91B292F22957C
+:1031E0002F7030E0223031052CF49F7041F08111B6
+:1031F00006C00CC0243031052CF49F7049F4805E69
+:10320000883020F0C8010E941D13CF2CDC2C06C092
+:10321000D80115969C91907F91F7F8CF8D2D6296ED
+:103220000FB6F894DEBF0FBECDBFDF91CF911F91D7
+:103230000F91FF90EF90DF90CF9008951F93CF9361
+:10324000DF93CDB7DEB72C970FB6F894DEBF0FBE75
+:10325000CDBF4F83588769877A878B879C87CE013C
+:1032600007960E9431178823C1F02F8138858A85FF
+:103270009B85892B31F03F3F11F080E003C02F3F49
+:10328000E1F781E0811147C04F81588569857A85D2
+:103290008B859C850E948A163EC086E0FE0137968B
+:1032A000DE01119601900D928A95E1F7FF81E88584
+:1032B0004A855B854115510531F0EF3F31F481E0DE
+:1032C000FF3F19F403C081E001C080E080FD23C00E
+:1032D0002091820130E0C9010196877099276091A1
+:1032E000810170E086179707F1F1F983EA835D8326
+:1032F0004C8396E0929FD001939FB00D1124AD575F
+:10330000BE4FFE01319601900D929A95E1F78093A0
+:1033100082010E949A1616E08091810190918201AB
+:10332000891779F1189FC00111248D579E4F0E9473
+:103330003117882331F1E09181011E9FF0011124A2
+:10334000ED57FE4F40815181628173818481958167
+:103350000E948A168091810190E0019687709927DA
+:1033600080938101D9CF0E9452161092820110924F
+:103370008101E3EBF1E086E0DF011D928A95E9F738
+:10338000CACF2C960FB6F894DEBF0FBECDBFDF912B
+:10339000CF911F910895EF92FF920F931F93CF93B8
+:1033A000DF93FC01009709F46FC0F12CEE24E39445
+:1033B000EF0121968491843740F4843008F055C0A1
+:1033C000813081F0823021F15FC0853709F447C038
+:1033D000C0F19CE7980F903708F056C08F770E9495
+:1033E000C01245C08F010E5F1F4FFE01849190E215
+:1033F000980F983050F48770FE2D01C0FF0F8A950A
+:10340000EAF78F2F0E94691C15C00E94F81114C0A2
+:103410008F010E5F1F4FFE01849190E2980F98304C
+:1034200068F48770FE2D01C0FF0F8A95EAF78F2F91
+:103430000E946F1C0E94921CE80119C00E94C012D9
+:10344000FBCFCF010296FE01C491CC2361F0EFE9DE
+:10345000FFE03197F1F700C00000C150F6CFCF0177
+:103460000296FE01F490EC0102C00E94F8118F2D2B
+:10347000882341F0EFE9FFE03197F1F700C0000049
+:103480008150F6CFFE0194CFDF91CF911F910F9124
+:10349000FF90EF90089508956093BD017093BE0171
+:1034A0008093BF019093C0010C943E160F931F931D
+:1034B0000091BD011091BE012091BF013091C0016A
+:1034C000062B172B282B392B0093BD011093BE011F
+:1034D0002093BF013093C0011F910F910C943E16B1
+:1034E0000F931F930091BD011091BE012091BF0168
+:1034F0003091C00106231723282339230093BD01EF
+:103500001093BE012093BF013093C0011F910F9112
+:103510000C943E160F931F930091BD011091BE01B4
+:103520002091BF013091C00106271727282739278E
+:103530000093BD011093BE012093BF013093C001E1
+:103540001F910F910C943E161092B9011092BA017E
+:103550001092BB011092BC010C943E1641E050E069
+:1035600060E070E004C0440F551F661F771F8A9506
+:10357000D2F74093B9015093BA016093BB017093A5
+:10358000BC010C943E1641E050E060E070E004C0E5
+:10359000440F551F661F771F8A95D2F78091B90196
+:1035A0009091BA01A091BB01B091BC01842B952BE5
+:1035B000A62BB72B8093B9019093BA01A093BB01BE
+:1035C000B093BC010C943E1641E050E060E070E026
+:1035D00004C0440F551F661F771F8A95D2F7409588
+:1035E0005095609570958091B9019091BA01A09124
+:1035F000BB01B091BC0184239523A623B7238093FC
+:10360000B9019093BA01A093BB01B093BC010C9493
+:103610003E1641E050E060E070E004C0440F551FEA
+:10362000661F771F8A95D2F78091B9019091BA01F0
+:10363000A091BB01B091BC0184279527A627B7278D
+:103640008093B9019093BA01A093BB01B093BC01E0
+:103650000C943E160F931F930091B9011091BA017B
+:103660002091BB013091BC01062B172B282B392B45
+:103670000093B9011093BA012093BB013093BC01B0
+:103680001F910F910C943E160F931F930091B90157
+:103690001091BA012091BB013091BC010623172380
+:1036A000282339230093B9011093BA012093BB0159
+:1036B0003093BC011F910F910C943E160F931F93F2
+:1036C0000091B9011091BA012091BB013091BC0168
+:1036D00006271727282739270093B9011093BA0125
+:1036E0002093BB013093BC011F910F910C943E16A7
+:1036F0000895CF92DF92EF92FF920F931F93CF9393
+:10370000DF93EC01C090BD01D090BE01E090BF01FD
+:10371000F090C0018091B9019091BA01A091BB01D4
+:10372000B091BC01C82AD92AEA2AFB2A0FE110E08D
+:10373000B701A601002E04C0769567955795479569
+:103740000A94D2F740FD05C00150110988F780E0C6
+:1037500007C0BE01802F0E9439090197A9F3802F6D
+:10376000DF91CF911F910F91FF90EF90DF90CF905D
+:103770000895CF93DF93EC010E94791BBE010E9454
+:103780003909DF91CF910895CB010E94B91B0895AB
+:1037900090910C019923D9F090910D019923B9F0E2
+:1037A000982F9695969596959F3088F5E0910E0105
+:1037B000F0910F01E90FF11D877021E030E001C0A9
+:1037C000220F8A95EAF78181822B818308954091A7
+:1037D0000E0150910F0120E030E09FEFFA01E20F5F
+:1037E000F31F6281681799F09F3F19F4611101C0BE
+:1037F000922F2F5F3F4F2E30310581F79F3F39F0D9
+:10380000FA01E90FF11D97FDFA9582830895089555
+:1038100090910C019923E1F090910D019923C1F051
+:10382000982F9695969596959F3020F5E0910E01EC
+:10383000F0910F01E90FF11D877021E030E001C028
+:10384000220F8A95EAF72095818128232183089504
+:1038500040910E0150910F0120E030E0FA01E20F9B
+:10386000F31F9281981301C012822F5F3F4F2E30B9
+:103870003105A1F7089581E090E0E0910E01F0910B
+:103880000F01E80FF91F1082019680319105A9F709
+:1038900008959091D401982B9093D4010895809528
+:1038A0009091D40198239093D40108951092D4015B
+:1038B00008959091D301982B9093D301089580950A
+:1038C0009091D30198239093D30108951092D3013E
+:1038D00008959091D201982B9093D20108958095EC
+:1038E0009091D20198239093D20108951092D20121
+:1038F00008958093C10108951092C10108954091E7
+:103900000E0150910F0120E030E080E0FA01E20F5B
+:10391000F31F918191118F5F2F5F3F4F2F30310542
+:10392000A9F70895E0910E01F0910F018091D40163
+:103930008083E0910E01F0910F0180819091D3017D
+:10394000892B8083E0910E01F0910F01808190918D
+:10395000D201892B80839091C101992361F0E0917C
+:103960000E01F0910F018081892B80830E947F1CC2
+:1039700081111092C10180910E0190910F010C9460
+:10398000DB108091EC01843021F11092D60120E40B
+:1039900088E190E00FB6F894A895809360000FBE80
+:1039A0002093600080E00E94D40983B7817F846007
+:1039B00083BF83B7816083BF7894889583B78E7FF8
+:1039C00083BF88E10FB6F894809360001092600086
+:1039D0000FBE089508950895CF930E94EA1C0E9497
+:1039E00008060E94EB1CC0E08C2F0E94F506811196
+:1039F00005C0CF5FCE30C1F780E001C081E0CF913C
+:103A000008950E9452160E94CF100C94D40982E0AF
+:103A100084BD93E095BD9AEF97BD80936E000895A5
+:103A20002FB7F8948091D7019091D801A091D90136
+:103A3000B091DA012FBF0895CF92DF92EF92FF92FB
+:103A40000F931F932FB7F8944091D7015091D8014D
+:103A50006091D9017091DA012FBF6A017B01EE24D8
+:103A6000FF248C0120E030E0C016D106E206F30608
+:103A700010F441505109481B590BCA011F910F9175
+:103A8000FF90EF90DF90CF9008951F920F920FB6A6
+:103A90000F9211248F939F93AF93BF938091D7017F
+:103AA0009091D801A091D901B091DA010196A11DA0
+:103AB000B11D8093D7019093D801A093D901B09301
+:103AC000DA01BF91AF919F918F910F900FBE0F9030
+:103AD0001F9018950E94D50DF8942FEF87EA91E674
+:103AE000215080409040E1F700C0000087E090EB5B
+:103AF000DC018093F6019093F701A093F801B09355
+:103B0000F9012CE088E190E00FB6F894A895809335
+:103B100060000FBE20936000FFCFEF92FF920F93E3
+:103B20001F93CF93DF93E82EF12C8F2D0E94F50683
+:103B3000C0E0D0E0082F10E098010C2E02C03595AF
+:103B400027950A94E2F720FD05C02196C630D105DD
+:103B500099F709C06C2F7F2D80E00E94FD06E812C6
+:103B6000F4CF81E005C0F3948EE0F812DECF80E060
+:103B7000DF91CF911F910F91FF90EF900895CF9318
+:103B8000C82F8CE20E948D1D882321F08C2FCF91AD
+:103B90000C948D1D80E0CF910895CF930E94121F49
+:103BA000811102C00E94F81EC5E6C15049F00E9472
+:103BB00008068FE39CE90197F1F700C00000F5CFFC
+:103BC00089E20E94BF1D811111C18AE20E94BF1DBE
+:103BD00081110E94F81E85E00E94BF1D81110E9484
+:103BE0006A1D0E941D1F8093D50187E00E94BF1DA2
+:103BF000882399F18BE10E94BF1D882351F0909199
+:103C0000D50191FB882780F921E0822780FB91F97B
+:103C100022C08EE00E94BF1D882351F09091D501F3
+:103C200092FB882780F921E0822780FB92F913C05C
+:103C300080E10E94BF1D9091D501882341F093FB44
+:103C4000882780F921E0822780FB93F904C0892F1F
+:103C5000809580FB90F99093D5018091D5010E94C9
+:103C6000211F0E942F1F8093F50180EE0E94BF1D2F
+:103C7000882341F08091F501982F909590FB80F971
+:103C80008093F50189E30E94BF1D882359F090912C
+:103C9000F50191FB882780F921E0822780FB91F9CB
+:103CA0009093F50182EE0E94BF1D882359F09091F8
+:103CB000F50192FB882780F921E0822780FB92F9A9
+:103CC0009093F50186EE0E94BF1D882359F09091D4
+:103CD000F50193FB882780F921E0822780FB93F987
+:103CE0009093F50183EE0E94BF1D882359F09091B7
+:103CF000F50194FB882780F921E0822780FB94F965
+:103D00009093F50185E30E94BF1D882359F090919F
+:103D1000F50195FB882780F921E0822780FB95F942
+:103D20009093F50181E30E94BF1D882359F0909183
+:103D3000F50196FB882780F921E0822780FB96F920
+:103D40009093F50181E10E94BF1D882359F0909165
+:103D5000F50197FB882780F921E0822780FB97F9FE
+:103D60009093F5018091F5010E94331F8091F50138
+:103D700087FB882780F980930D0187E20E94BF1D91
+:103D8000C82F8EE10E94BF1D8111C2608FE10E9489
+:103D9000BF1D8111C46080E20E94BF1D8111C860F7
+:103DA00081E20E94BF1D8111C06182E20E94BF1D9D
+:103DB0008111C06283E20E94BF1D8111C06484E250
+:103DC0000E94BF1D882311F0C06802C0CC2329F0D7
+:103DD0008C2F0E942A1F6C2F03C00E94261F682F61
+:103DE00070E080E090E0CF910C944C1ACF91089550
+:103DF0006DEE7EEF80E090E00E94502560E082E072
+:103E000090E00E943E2560E083E090E00E943E2525
+:103E100060E084E090E00E943E2560E085E090E074
+:103E20000C943E2580E090E00E94382521E08D3EF4
+:103E30009E4F09F020E0822F089582E090E00C94DC
+:103E40003025682F82E090E00C943E2583E090E0DE
+:103E50000C943025682F83E090E00C943E2584E09C
+:103E600090E00C943025682F84E090E00C943E257F
+:103E70008091DD0180FF0BC06091130185E0689F98
+:103E8000B001112475956795759567952AC081FFD6
+:103E900009C06091130185E0689FB00111247595F8
+:103EA00067951FC082FF07C06091130185E0689F7E
+:103EB000B001112416C04091DE014423C9F0609185
+:103EC0001201461788F72091130185E0289F900181
+:103ED0001124429FC001439F900D112470E00E9465
+:103EE00002256038710540F46115710539F002C092
+:103EF00065E070E0862F08958FE7089581E00895CA
+:103F00008091DD0180FF08C06091110170E075951E
+:103F100067957595679521C081FF06C06091110175
+:103F200070E07595679519C082FF04C0609111011A
+:103F300070E010C08091DE018823C1F06091100113
+:103F40008617A0F790911101989FC001112470E08D
+:103F50000E9402256038710528F46115710521F071
+:103F6000862F08958FE7089581E0089561E070E05D
+:103F7000F4CF803F21F40E94381F819504C0813F17
+:103F800029F40E94381F8093E1010895823F21F4B3
+:103F90000E94381F819504C0833F29F40E94381F76
+:103FA0008093E0010895893F19F40E94801F05C0A5
+:103FB0008A3F31F40E94801F81958093E201089529
+:103FC0008B3F21F40E94801F819504C08C3F29F40F
+:103FD0000E94801F8093E3010895843F21F4809123
+:103FE000DF01816017C0853F21F48091DF0182608D
+:103FF00011C0863F21F48091DF0184600BC0873FB0
+:1040000021F48091DF01886005C0883F31F4809100
+:10401000DF0180618093DF0108958D3F21F480915D
+:10402000DD0181600BC08E3F21F48091DD01826053
+:1040300005C08F3F29F48091DD0184608093DD010C
+:104040000895803F39F48091E10187FF6CC01092A0
+:10405000E10169C0813F29F48091E1011816BCF3A8
+:1040600062C09091E001823F29F497FF5CC01092FA
+:10407000E00159C0833F19F41916CCF354C0893FAD
+:1040800041F48091E20118160CF04DC01092E2014B
+:104090004AC08A3F29F48091E20187FF44C0F6CFED
+:1040A0008B3F39F48091E30187FF3DC01092E3011B
+:1040B0003AC08C3F29F48091E3011816BCF333C059
+:1040C000843F21F48091DF018E7F17C0853F21F46A
+:1040D0008091DF018D7F11C0863F21F48091DF0147
+:1040E0008B7F0BC0873F21F48091DF01877F05C064
+:1040F000883F31F48091DF018F7E8093DF0113C010
+:104100008D3F21F48091DD018E7F0BC08E3F21F425
+:104110008091DD018D7F05C08F3F29F48091DD0105
+:104120008B7F8093DD018091E00181110EC0809131
+:10413000E10181110AC08091E201811106C08091E4
+:10414000E301811102C01092DE0108958FED91E02C
+:104150000E94E6100E94101D9093DC018093DB0109
+:1041600008951F93CF93DF938091DB019091DC0141
+:104170000E941C1D4091DE01442321F02091140176
+:1041800030E006C0209115015AE0259F90011124CE
+:104190008217930708F482C08091E0011091E10139
+:1041A000D091E201C091E301811107C0111105C056
+:1041B000D11103C0CC2309F471C04F3F19F04F5FF8
+:1041C0004093DE01181624F40E94381F8093E0010A
+:1041D0008091E00187FF05C00E94381F8195809380
+:1041E000E001111624F40E94381F8093E1018091B0
+:1041F000E10187FF05C00E94381F81958093E1018E
+:104200006091E001662339F11091E101112319F168
+:10421000772767FD7095872F972F0E94132423E33C
+:1042200033E343E35FE30E9477240E94E02360933B
+:10423000E001612F772767FD7095872F972F0E94E8
+:10424000132423E333E343E35FE30E9477240E94D4
+:10425000E0236093E1011D1624F40E94801F8093E7
+:10426000E2018091E20187FF05C00E94801F8195D5
+:104270008093E2011C1624F40E94801F8093E301C6
+:104280008091E30187FF05C00E94801F8195809384
+:10429000E301DF91CF911F910C94A620DF91CF9184
+:1042A0001F910895EFEDF1E085E0DF011D928A9501
+:1042B000E9F71092DE011092DD010895833081F15B
+:1042C00028F4813059F08230D1F00895853009F416
+:1042D00049C0B8F1863009F456C0089520911501FF
+:1042E000862F90E0820F911D8F3F910520F4620F81
+:1042F0006093150108958FEF809315010895209123
+:104300001401862F90E0820F911D8F3F910520F4BC
+:10431000620F6093140108958FEF80931401089544
+:1043200020911301862F90E0820F911D8F3F910500
+:1043300020F4620F6093130108958FEF80931301AF
+:10434000089520911201862F90E0820F911D8F3FDA
+:10435000910520F4620F6093120108958FEF80930E
+:104360001201089520911101862F90E0820F911D76
+:104370008F3F910520F4620F6093110108958FEF34
+:1043800080931101089520911001862F90E0820FF3
+:10439000911D8F3F910520F4620F609310010895E5
+:1043A0008FEF809310010895833011F128F481304C
+:1043B00049F0823091F00895853081F120F1863006
+:1043C000C1F1089580911501681720F4861B809330
+:1043D0001501089510921501089580911401681730
+:1043E00020F4861B809314010895109214010895FF
+:1043F00080911301681720F4861B809313010895A0
+:1044000010921301089580911201681720F4861B01
+:104410008093120108951092120108958091110164
+:10442000681720F4861B80931101089510921101E2
+:10443000089580911001681720F4861B8093100165
+:1044400008951092100108958D3109F442C020F5AD
+:104450008E3009F477C070F4873009F459C018F42D
+:104460008630F1F134C0883009F4A8C08B3009F4EB
+:10447000A5C02DC0863109F4A1C038F4803109F4FB
+:1044800072C0813109F479C022C0893109F496C023
+:104490008B3109F44DC01BC0853309F487C048F443
+:1044A000873209F483C008F473C0893209F47EC0EE
+:1044B0000EC0833438F48A3308F068C0883309F4B6
+:1044C0007DC005C0833409F471C0883499F080E060
+:1044D00008950E949A230E94CF100E94D4096EC0B2
+:1044E0008091D501817F8E7F8093D50181E080937B
+:1044F000E50108950E9452162FEF83ED90E32150BD
+:1045000080409040E1F700C000000E946A1D56C044
+:104510009091D501892F8095817080FB90F919F0D9
+:10452000966098601DC0997F977F9093D50146C093
+:104530009091D50191FB882780F921E0822780FBAB
+:1045400091F909C09091D50192FB882780F921E06B
+:10455000822780FB92F99093D501882379F19160AD
+:104560009093D50108959091D50193FB882780F908
+:1045700021E0822780FB93F9EECF0E9452168091B2
+:104580000D0191E0892780930D0118C027EC01C02F
+:1045900023EE280F61E070E080E090E004C0660F39
+:1045A000771F881F991F2A95D2F704C061E070E039
+:1045B00080E090E00E944C1A0E94521681E008951B
+:1045C00080E0089580E00895CF93C82F8091E501A1
+:1045D000813079F018F08230D1F184C0A0910E01C1
+:1045E000B0910F018C91813169F0823209F07CC069
+:1045F00009C0A0910E01B0910F018C91813111F091
+:10460000823249F48C2F0E94E02281111DC08C2F30
+:104610000E9424221AC08C2F0E94E222811114C011
+:10462000C43179F048F4CB3079F0C03109F060C082
+:1046300082E08093E50108C0C93219F0C83321F047
+:1046400057C01092E50154C081E0817053C0C93257
+:1046500089F118F5C43171F1A8F4C73009F046C0EA
+:104660008AE08093150194E19093140193E0909374
+:1046700013018093120188E08093110188E28093F6
+:10468000100134C0CE51C63088F5EC2FF0E0E65D65
+:10469000FE4F80818093E40129C0CE34E9F020F4FC
+:1046A000CB3421F56AE013C0C13579F0C235F1F49D
+:1046B00061E00DC08091E401882319F01092E401BB
+:1046C00015C081E08093E50115C061E006C08091CE
+:1046D000E4010E945E210AC06AE08091E4010E9428
+:1046E000D42104C01092E50180E004C081E002C042
+:1046F00080E0ABCFCF910895E1E8F0E08081886061
+:1047000080838081816080838FB7F89493E0909359
+:10471000890090ED909388008FBF0895EFE6F0E058
+:104720008081826080830895EFE6F0E080818D7F54
+:1047300080830895EFE6F0E0808192E0892780830E
+:1047400008951F920F920FB60F9211242F933F934B
+:104750004F935F936F937F938F939F93AF93BF9389
+:10476000EF93FF938091E6019091E701019690937A
+:10477000E7018093E601811103C082E00E94D40921
+:10478000E091E701E695E695F0E0E259FA4FE49111
+:104790008091E6018E1303C080E00E94D409FF914E
+:1047A000EF91BF91AF919F918F917F916F915F91A9
+:1047B0004F913F912F910F900FBE0F901F90189522
+:1047C00004D06894B1118DC0089570D088F09F57BF
+:1047D00090F0B92F9927B751A0F0D1F0660F771F4D
+:1047E000881F991F1AF0BA95C9F712C0B13081F02D
+:1047F00077D0B1E0089574C0672F782F8827B85F0D
+:1048000039F0B93FCCF3869577956795B395D9F78D
+:104810003EF490958095709561957F4F8F4F9F4F97
+:104820000895E89409C097FB3EF4909580957095A3
+:1048300061957F4F8F4F9F4F9923A9F0F92F96E9EC
+:10484000BB279395F695879577956795B795F11161
+:10485000F8CFFAF4BB0F11F460FF1BC06F5F7F4FFE
+:104860008F4F9F4F16C0882311F096E911C0772310
+:1048700021F09EE8872F762F05C0662371F096E819
+:10488000862F70E060E02AF09A95660F771F881FE8
+:10489000DAF7880F9695879597F9089557FD905800
+:1048A000440F551F59F05F3F71F04795880F97FBF4
+:1048B000991F61F09F3F79F08795089512161306AE
+:1048C0001406551FF2CF4695F1DF08C016161706DD
+:1048D0001806991FF1CF8695710561050894089512
+:1048E000E894BB2766277727CB0197F908950BD06B
+:1048F00078C069D028F06ED018F0952309F05AC01E
+:104900005FC01124EECFCADFA0F3959FD1F3950FBE
+:1049100050E0551F629FF001729FBB27F00DB11D43
+:10492000639FAA27F00DB11DAA1F649F6627B00DD3
+:10493000A11D661F829F2227B00DA11D621F739FBC
+:10494000B00DA11D621F839FA00D611D221F749FCA
+:104950003327A00D611D231F849F600D211D822F11
+:10496000762F6A2F11249F5750408AF0E1F0882358
+:104970004AF0EE0FFF1FBB1F661F771F881F915065
+:104980005040A9F79E3F510570F014C0AACF5F3F79
+:10499000ECF3983EDCF3869577956795B795F79598
+:1049A000E7959F5FC1F7FE2B880F911D9695879520
+:1049B00097F9089597F99F6780E870E060E008959F
+:1049C0009FEF80EC089500240A9416161706180627
+:1049D0000906089500240A94121613061406050603
+:1049E0000895092E0394000C11F4882352F0BB0F94
+:1049F00040F4BF2B11F460FF04C06F5F7F4F8F4FF7
+:104A00009F4F089597FB072E16F4009407D077FD6B
+:104A100009D00E941C2507FC05D03EF49095819595
+:104A20009F4F0895709561957F4F0895EE0FFF1F7A
+:104A30000590F491E02D0994AA1BBB1B51E107C01E
+:104A4000AA1FBB1FA617B70710F0A61BB70B881F1E
+:104A5000991F5A95A9F780959095BC01CD010895AD
+:104A6000F999FECF92BD81BDF89A992780B5089536
+:104A7000A8E1B0E042E050E00C945825262FF999C7
+:104A8000FECF92BD81BDF89A019700B4021639F0AD
+:104A90001FBA20BD0FB6F894FA9AF99A0FBE08957E
+:104AA0000196272F0E943F250C943E25DC01CB0167
+:104AB000FC01F999FECF06C0F2BDE1BDF89A31962E
+:104AC00000B40D9241505040B8F70895F894FFCFCC
+:104AD0002002D609630A400A0C0AD9090101C20161
+:104AE00028080A03140A3F4D36392F05E204AC04A6
+:104AF000730406041F04380451040102030405066C
+:044B00000708090099
:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/readme.md b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
index 842dc7ee1..6465cd79e 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/readme.md
+++ b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
@@ -55,7 +55,7 @@ Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these
* The bright green keys are more F-keys
* The dark yellow keys signal Web and Audio applications
* The light yellow keys signal the operating system
-* The uncolored keys do nothing in case you bump them by accident
+* The dark gray keys do nothing in case you bump them by accident
![Ordinary media layout](ordinary-media.png)
@@ -67,14 +67,37 @@ Alas, the yellow keys have at best spotty success with common software. Good luc
## Switching Between Layers ##
-The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; it works either way. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
+In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
-This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol character associated with the Shift Lock button).
+Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way.
-## Special Escape & Backspace Sequences ##
+Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
-In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, is home to the tilde (er, grave) which is commonly found there. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
+## Special Sequences ##
-That tilde key has a second function as the Shift Lock key and that makes possible a special feature. To make this layout as Ordinary as possible, the Escape key can *also* be accessed by pressing Shift Lock then the 1 button right next to it. This easy gesture is a way to partially maintain the ease of flicking your wrist to the left and tapping Escape. This gesture works in all layers.
+![Ordinary special layout](ordinary-special.png)
-Finally, because the special Escape sequence is so natural and useful, on the top right corner of the Ergodox EZ you can do the same gesture with the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. These special sequences should feel unremarkably mundane but might prove to be remarkably useful.
+### Escape ###
+
+The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
+
+The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
+
+### Backspace ###
+
+At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
+
+### RShift ###
+
+The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard.
+
+****
+
+The Ordinary Layout for the Ergodox EZ keyboard, v4
+
+Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+
+No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
+
+Details: readme.md
+ https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c
index b3ed55f21..19e539006 100644
--- a/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c
@@ -15,6 +15,15 @@
#include "keymap_extras/keymap_spanish.h"
#include "keymap_extras/keymap_bepo.h"
+
+/**
+* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases
+* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/
+* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ!
+*
+* use at own risk!
+**/
+
#define BASE 0
#define SYMB 1
#define MDIA 2
@@ -23,24 +32,73 @@
#define EGOS 5
#define SMLY_TOG_QUOT 0
+
#define M_TOGGLE_5 1
+
#define TGH_NUM 2
+
#define M_DE_OSX_PLUS_CTRLALT 3
+
#define SM_KISS 4
+
#define SM_FROWN 5
+
#define SM_CRY 6
+
#define SM_SMILE 7
+
#define SM_SMIRK 8
+
#define M_LGUI_SHFT 9
+
#define SM_HEART 10
+
#define TOG_HLD_MDIA 11
+
#define SM_LAUGH 12
+
#define SM_SAD 13
+
#define M_DE_OSX_CIRC_CTRLCMD 14
+
#define M_MEH_SH_ACUT 15
+
//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/**
+* Layer: BASE
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/
+* | ESC | 1 | 2 | 3 | 4 | 5 | Hold or toggle | | Hold or toggle | 6 | 7 | 8 | 9 | 0 | ß |
+* | | | | | | | Layer NUMB | | Layer MDIA | | | | | | |
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/
+* | TAB | Q | W | E | R | T | Cmd | | Cmd | Z | U | I | O | P | Ü |
+* | | | | | | | | | | | | | | | |
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\ \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/
+* | Alt | A | S | D | F | G | | H | J | K | L | Ö | Ä |
+* | | | | | | | | | | | | | ALT |
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/
+* | Shift | Y | X | C | V | B | Alt | | Alt | N | M | , | . | - | Shift |
+* | | Ctrl | | | | | | | | | | | | Ctrl | |
+* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\
+*
+*
+* /-------------------//-------------------//-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------//-------------------//-------------------/
+* | < | LongPress / Type | LongPress / Type | Shift+Ctrl | Type | | # | ACUT | CMD+Shift | ALT+Shift | + |
+* | SYMB | DE_OSX_CIRC_CTRLCMD| DE_OSX_PLUS_CTRAlt | | Toggle SMLY | | Meh | Hyper | | | SYMB |
+* \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/ /-------------------//-------------------/ \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\
+* | HOME | END | | LEFT | RIGHT |
+* | | | | | |
+* \-------------------\/-------------------/ /-------------------/\-------------------\
+* | PGUP | | UP |
+* | | | |
+* /-------------------//-------------------//-------------------/ /-------------------//-------------------//-------------------/
+* | BSPC | DEL | PGDN | | DOWN | ENT | SPC |
+* | | | | | | | |
+* \-------------------\\-------------------\\-------------------\ \-------------------\\-------------------\\-------------------\
+*
+*
+**/
[BASE]=KEYMAP(
//left half
KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM),
@@ -60,6 +118,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LEFT, KC_RIGHT,
KC_UP,
KC_DOWN, KC_ENT, KC_SPC),
+/**
+* Layer: SYMB
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/
+* | APPLICATION| F1 | F2 | F3 | F4 | F5 | F5 | | F6 | F6 | F7 | F8 | F9 | F10 | F11 |
+* | | | | | | | | | | | | | | | |
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/
+* | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! |
+* | | | | | | | | | | | | | | | |
+* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\ \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/
+* | | # | $ | \ | / | . | | / | ( | ) | { | } | # |
+* | | | | | | | | | | | | | |
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------//-----------//-----------/
+* | | | < | % | | | ~ | | | | | | ~ | | | | |
+* | | | | | | | | | | | | | | | |
+* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\
+*
+*
+* /-----------//-----------//-----------//-----------//-----------/ /-----------//-----------//-----------//-----------//-----------/
+* | | | | | | | ' | DQOT | | Toggle 5 | |
+* | | | | | | | | | | | |
+* \-----------\\-----------\\-----------\\-----------\/-----------//-----------/ /-----------//-----------/ \-----------\\-----------\\-----------\\-----------\\-----------\
+* | | | | F13 | F12 |
+* | | | | | |
+* \-----------\/-----------/ /-----------/\-----------\
+* | | | F14 |
+* | | | |
+* /-----------//-----------//-----------/ /-----------//-----------//-----------/
+* | | DEL | | | F15 | | |
+* | | | | | | | |
+* \-----------\\-----------\\-----------\ \-----------\\-----------\\-----------\
+*
+*
+**/
[SYMB]=KEYMAP(
//left half
KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5,
@@ -79,6 +170,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_F13, KC_F12,
KC_F14,
KC_F15, KC_TRNS, KC_TRNS),
+/**
+* Layer: MDIA
+* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/
+* | | | | | | | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/
+* | | | BTN1 | U | BTN2 | U | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* /-----//-----//-----//-----//-----//-----/\-----\ \-----\/-----//-----//-----//-----//-----//-----/
+* | | | L | D | R | D | | | | | | | |
+* | | | | | | | | | | | | | |
+* /-----//-----//-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----//-----//-----/
+* | | | L | D | R | BTN3 | | | | | | | | UP | |
+* | | | | | | | | | | | | | | | |
+* \-----\\-----\\-----\\-----\\-----\\-----\\-----\ \-----\\-----\\-----\\-----\\-----\\-----\\-----\
+*
+*
+* /-----//-----//-----//-----//-----/ /-----//-----//-----//-----//-----/
+* | | | | | | | | | LEFT | DOWN | RIGHT|
+* | | | | | | | | | | | |
+* \-----\\-----\\-----\\-----\/-----//-----/ /-----//-----/ \-----\\-----\\-----\\-----\\-----\
+* | | | | MPRV | MNXT |
+* | | | | | |
+* \-----\/-----/ /-----/\-----\
+* | | | VOLU |
+* | | | |
+* /-----//-----//-----/ /-----//-----//-----/
+* | | | | | VOLD | MUTE | MPLY |
+* | | | | | | | |
+* \-----\\-----\\-----\ \-----\\-----\\-----\
+*
+*
+**/
[MDIA]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -90,14 +214,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
//right half
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
- KC_MUTE, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_WBAK),
+ 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_UP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
+ KC_MPRV, KC_MNXT,
+ KC_VOLU,
+ KC_VOLD, KC_MUTE, KC_MPLY),
+/**
+* Layer: SMLY
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | Typing | Typing | Typing | | | | |
+* | | | | | | | | | SM_SMILE| SM_SMIRK| SM_LAUGH| | | | |
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | | Typing | Typing | Typing | | | |
+* | | | | | | | | | | SM_FROWN| SM_SAD | SM_CRY | | | |
+* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/
+* | | | | | | | | Typing | Typing | | | | |
+* | | | | | | | | SM_HEART| SM_KISS | | | | |
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\
+*
+*
+* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/
+* | | | | | | | | | | | |
+* | | | | | | | | | | | |
+* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\
+* | | | | | |
+* | | | | | |
+* \--------\/--------/ /--------/\--------\
+* | | | |
+* | | | |
+* /--------//--------//--------/ /--------//--------//--------/
+* | | | | | | | |
+* | | | | | | | |
+* \--------\\--------\\--------\ \--------\\--------\\--------\
+*
+*
+**/
[SMLY]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -117,6 +274,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
+/**
+* Layer: NUMB
+* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/
+* | | | | | | | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+* | | | | | | | | | | | | | | | |
+* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/
+* | | | | UP | | | | | | / | 7 | 8 | 9 | * | F12 |
+* | | | | | | | | | | | | | | | |
+* /----//----//----//----//----//----/\----\ \----\/----//----//----//----//----//----/
+* | | | LEFT| DOWN| RGHT| | | / | 4 | 5 | 6 | + | - |
+* | | | | | | | | | | | | | |
+* /----//----//----//----//----//----//----/ /----//----//----//----//----//----//----/
+* | | | | | | | | | | % | 1 | 2 | 3 | | |
+* | | | | | | | | | | | | | | | |
+* \----\\----\\----\\----\\----\\----\\----\ \----\\----\\----\\----\\----\\----\\----\
+*
+*
+* /----//----//----//----//----/ /----//----//----//----//----/
+* | | | | | | | 0 | . | , | = | |
+* | | | | | | | | | | | |
+* \----\\----\\----\\----\/----//----/ /----//----/ \----\\----\\----\\----\\----\
+* | | | | | |
+* | | | | | |
+* \----\/----/ /----/\----\
+* | | | |
+* | | | |
+* /----//----//----/ /----//----//----/
+* | | | | | | | |
+* | | | | | | | |
+* \----\\----\\----\ \----\\----\\----\
+*
+*
+**/
[NUMB]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -136,6 +326,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
+/**
+* Layer: EGOS
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* /--------//--------//--------//--------//--------//--------/\--------\ \--------\/--------//--------//--------//--------//--------//--------/
+* | Shift | | | | | | | | | | | | |
+* | | | | | | | | | | | | | |
+* /--------//--------//--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------//--------//--------/
+* | | | | | | | | | | | | | | | |
+* | | | | | | | | | | | | | | | |
+* \--------\\--------\\--------\\--------\\--------\\--------\\--------\ \--------\\--------\\--------\\--------\\--------\\--------\\--------\
+*
+*
+* /--------//--------//--------//--------//--------/ /--------//--------//--------//--------//--------/
+* | Ctrl | | | | | | | | | Toggle 5| |
+* | | | | | | | | | | | |
+* \--------\\--------\\--------\\--------\/--------//--------/ /--------//--------/ \--------\\--------\\--------\\--------\\--------\
+* | F1 | F2 | | | |
+* | | | | | |
+* \--------\/--------/ /--------/\--------\
+* | F3 | | |
+* | | | |
+* /--------//--------//--------/ /--------//--------//--------/
+* | SPC | Ctrl | F4 | | | | |
+* | | | | | | | |
+* \--------\\--------\\--------\ \--------\\--------\\--------\
+*
+*
+**/
[EGOS]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -259,7 +482,7 @@ case M_LGUI_SHFT:
if (record->event.pressed){
return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END);
}else{
- return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
+ return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
}
break;
diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental.hex b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental.hex
new file mode 100644
index 000000000..3c7ab5859
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental.hex
@@ -0,0 +1,1247 @@
+:100000000C9430040C9474040C9474040C947404D4
+:100010000C9474040C9474040C9474040C94740480
+:100020000C9474040C9474040C94680F0C943A109F
+:100030000C9474040C9474040C9474040C94740460
+:100040000C9474040C9404250C9474040C9474049F
+:100050000C9474040C94931E0C9474040C94740407
+:100060000C9474040C9474040C9474040C94740430
+:100070000C9474040C9474040C9474040C94740420
+:100080000C9474040C9474040C9474040C94740410
+:100090000C9474040C9474040C9474040C94740400
+:1000A0000C9474040C9474040C9474048404BE04BE
+:1000B000D004F2040A05100516051C0522052805C2
+:1000C0002D0533055D05620567057E05A710C9107E
+:1000D000B711C910B7110E113111B711861199114D
+:1000E00085148514C214C214051543155C175C17DA
+:1000F0005C155C175D165D1630175C175C174717AB
+:1001000002E002E2012E022E02E10002E002E10220
+:10011000E20001E001E101E20002E002E301640229
+:10012000640002E002E30001E001E30001E10137C5
+:10013000023702E10138023801E10125022502E11E
+:100140000001E10137023702E10138023801E10123
+:1001500007020702E10001350235012002200002FA
+:10016000E302E102E302E102E302E102E302E1026F
+:10017000E302E102E302E102E302E102E302E1025F
+:10018000E302E102E302E102E302E102E302E1024F
+:10019000E302E102E302E102E302E102E302E1023F
+:1001A000E302E102E302E102E302E102E302E1022F
+:1001B000E302E102E302E102E302E102E302E1021F
+:1001C000E302E102E302E102E302E102E302E1020F
+:1001D000E302E102E302E102E302E102E302E102FF
+:1001E000E302E102E302E102E302E102E302E102EF
+:1001F000E302E102E302E10001E301E10001E101C8
+:1002000036023602E10138023801E10126022602F7
+:10021000E10001E10137023702E10138023801E172
+:100220000126022602E10001E10136023602E10167
+:1002300038023801E10125022502E10001E1013720
+:10024000023702E10138023801E20125022502E20B
+:100250000001E10137023702E10138023801E10112
+:1002600030023002E10002E002E20130023000021E
+:10027000E002E20001E001E20001E10131023102AD
+:10028000E10029002B00E200E100358100001E00A2
+:10029000140004001D710E304E001F001A001600DD
+:1002A0001B0003304C002000080007000600E0029D
+:1002B0002A00210015000900190000304B0022001F
+:1002C00017000A00050000004A000230E3000000A9
+:1002D000E20000004D000B30E7000000E6000000E7
+:1002E000500023001C000B00110000004F002400F0
+:1002F00018000D0010003177520025000C000E0090
+:1003000036002E7F2C00260012000F003700E10877
+:1003100028002700130033003871E10451002D003C
+:100320002F003474E50030810000650001000100F9
+:100330000100010000003A00350031000100010019
+:1003400001003B0035022102350001004C003C0059
+:100350001E0224062202010001003D002D0224029B
+:100360002404010001003E000100370011040000D8
+:1003700001003E00010000000100000001003F00FC
+:10038000010000000100000068003F002406240274
+:10039000240400004500400022042502110431021B
+:1003A000690041002304260201001F0201004200EF
+:1003B0003500250401000100010043003502260438
+:1003C000010001306A0044001E02310001000100FA
+:1003D0000000010001000100010001000000010017
+:1003E000010001000100010001000100F400F20021
+:1003F000FB00010001000100F000F100FA00010023
+:1004000001000100F500F300FC0001000100010003
+:10041000F900FA00F60000000100010001000000F0
+:1004200001000000010001000100000001000000C7
+:10043000AC0001000100010001000000AB00010060
+:100440000100010001000100A900010001000100FC
+:1004500001000100AE000100010001000100500098
+:10046000A80001000100010052005100AA00010093
+:100470000100010001004F00000001000100010027
+:100480000100010000000100010001000100010065
+:100490000100010001000100010001000100010054
+:1004A0000100010001000100010001000100010044
+:1004B0000100010001000100010001000100000035
+:1004C00001000100010000000100000001000730F0
+:1004D00001000000010000000100083005300A3072
+:1004E0000100000001000C300D300430010001005B
+:1004F00001000100063001000100010001000100BF
+:1005000001000100010001000100010001000100E3
+:1005100001000100010001000100010001000100D3
+:1005200000000100010001000100010000000100C5
+:100530000100010001000100010001000100500064
+:100540000100010001000100520051000100010002
+:100550000100010001004F00010001000100010045
+:100560000100010001000000010001000100000085
+:100570000100000001000100010000000100000076
+:1005800001003F002402240222020000010040007A
+:10059000240021001E002700010041002500220048
+:1005A0001F00370001004200260023002000360013
+:1005B0000100430030023000010027020100440026
+:1005C0004500380001000100000001000100E100C9
+:1005D0000100E00000000100010001000100010035
+:1005E0003D0001000100010001000100E0000100E8
+:1005F00001000100010001002C00010001000100C8
+:10060000010001003C0001000100010001000000A8
+:100610003A00010001000000010000003B00010061
+:1006200001000000010000000100010001000100C4
+:1006300001000000010001000100010001000100B3
+:1006400001000100010001000100010001000100A2
+:100650000100010001000100010001000100010092
+:100660000100013001000100010001000100010052
+:10067000000016034500720067006F0044006F0021
+:100680007800200045005A00000016034500720063
+:1006900067006F0044006F007800200045005A009A
+:1006A00000000403090409026D00040100A0FA0916
+:1006B0000400000103010100092111010001223F92
+:1006C000000705810308000A090401000103010273
+:1006D00000092111010001224D00070582030800D5
+:1006E0000A090402000103000000092111010001B0
+:1006F0002236000705830308000A090403000103EA
+:1007000000000009211101000122390007058403BE
+:100710001000011201100100000008EDFE07130196
+:10072000000102000105010906A101050719E029E0
+:10073000E7150025019508750181020508190129B1
+:10074000059505750191029501750391010507193C
+:1007500000297715002501957875018102C00501F2
+:100760000980A101850216010026B7001A01002A9E
+:10077000B700751095018100C0050C0901A1018524
+:1007800003160100269C021A01002A9C027510958E
+:10079000018100C005010902A1010901A1000509AB
+:1007A000190129051500250195057501810295019D
+:1007B000750381010501093009311581257F9502F5
+:1007C0007508810609381581257F95017508810610
+:1007D000050C0A38021581257F950175088106C030
+:1007E000C005010906A101050719E029E715002543
+:1007F00001950875018102950175088101050819A7
+:100800000129059505750191029501750391010571
+:1008100007190029FF150025FF950675088100C0FE
+:100820000000000000000000000000010204060AB1
+:100830000F17202C3A4A5D71879DB3C7DAE9F5FCA2
+:10084000FFFCF5E9DAC7B39D87715D4A3A2C2017A2
+:100850000F0A060402010000000000000000000072
+:1008600011241FBECFEFDAE0DEBFCDBF04B603FE1A
+:1008700024C08091F0019091F101A091F201B0911A
+:10088000F3018730904BA740B04BB9F41092F001C0
+:100890001092F1011092F2011092F30114BE84B78C
+:1008A000877F84BF88E10FB6F89480936000109230
+:1008B00060000FBEE0E0FFE3099511E0A0E0B1E0C9
+:1008C000E6E9FDE402C005900D92A433B107D9F723
+:1008D00011E0A4E3B1E001C01D92A03FB107E1F730
+:1008E0000E94AC0C0C94C9260C940000462F50E0DA
+:1008F0004031510508F01FC1DC01FA01EA5AFF4FEF
+:1009000012968C910C9479268823A9F00E945D1E82
+:1009100090933501809334018091B3019091B4019B
+:10092000A091B501B091B60128E08227887099277F
+:10093000AA27BB27AEC08091B3019091B401A091CA
+:10094000B501B091B60128E0822788709927AA27BF
+:10095000BB278093B3019093B401A093B501B093EA
+:10096000B60180913401909135010E94691E87394A
+:1009700091050CF0E0C089E792E00895882309F41E
+:10098000DAC08091B3019091B401A091B501B0910A
+:10099000B60120E2822780729927AA27BB2779C057
+:1009A000882339F00E945D1E9093350180933401B5
+:1009B0000AC080913401909135010E94691E8739E7
+:1009C00091050CF4B8C08091B3019091B401A0914D
+:1009D000B501B091B60120E1822780719927AA273D
+:1009E000BB2757C0882349F00E945D1E90933501B4
+:1009F0008093340184E792E00895809134019091CE
+:100A000035010E94691E873991050CF08EC086E67B
+:100A100092E00895882309F48EC081E592E008955C
+:100A2000882309F488C08CE392E00895882309F4B0
+:100A300082C087E292E00895882309F47CC082E1B5
+:100A400092E00895882309F476C08DEF91E008952F
+:100A500081116EC08FE591E00895882309F46BC081
+:100A600086E591E008958823E9F00E945D1E909349
+:100A70003501809334018091B3019091B401A0912C
+:100A8000B501B091B60124E0822784709927AA2786
+:100A9000BB278093B3019093B401A093B501B093A9
+:100AA000B60149C080913401909135010E94691EC0
+:100AB000873991050CF43FC0DECF8823E1F181E452
+:100AC00091E008958823B9F18CE291E0089588239C
+:100AD00049F00E945D1E909335018093340187E2B6
+:100AE00091E0089580913401909135010E94691E32
+:100AF000873991051CF589E191E00895882349F033
+:100B00000E945D1E909335018093340182E191E053
+:100B1000089580913401909135010E94691E8739B2
+:100B200091057CF480E091E008958FE692E00895CD
+:100B300088EF91E0089580E090E0089582E291E0EE
+:100B400008958BE091E0089508956091B30170914C
+:100B5000B4018091B5019091B6010E94BF1D5698D5
+:100B60005E9825982D9826982E9827982F98823051
+:100B700061F018F4813031F00895843069F08530E7
+:100B800039F00895259A2D9A0895269A2E9A089557
+:100B9000259A2D9A269A2E9A279A2F9A08950C9480
+:100BA000A50556985E9825982D9826982E982798F2
+:100BB0002F988FEF90E09093890080938800909316
+:100BC0008B0080938A0090938D0080938C00259AEF
+:100BD0002D9A2FEF80E792E0215080409040E1F77E
+:100BE00000C00000269A2E9A2FEF80E792E0215055
+:100BF00080409040E1F700C00000279A2F9A2FEF25
+:100C000080E792E0215080409040E1F700C0000072
+:100C100025982D982FEF80E792E02150804090405A
+:100C2000E1F700C0000026982E982FEF80E792E0B1
+:100C3000215080409040E1F700C0000027982F9895
+:100C400056985E9825982D9826982E9827982F9834
+:100C5000089589EA8093800089E080938100249838
+:100C60002C983F988AB18F748AB96E98479A8BB145
+:100C7000806B8BB9769A0E94D1050C94A40580E212
+:100C8000809300018091360181110EC00E948E0672
+:100C900081E0809336012FEF83ED90E32150804077
+:100CA0009040E1F700C0000080E40E949406809329
+:100CB000000181112EC00E94BE06809300018111A7
+:100CC00028C00E94BE0680930001811122C08FE3DC
+:100CD0000E94BE068093000181111BC00E94B606CF
+:100CE00080E40E94940680930001811112C08CE080
+:100CF0000E94BE068093000181110BC00E94BE06B7
+:100D000080930001811105C08FE30E94BE0680938D
+:100D100000010E94B6068091000108951092B9006A
+:100D20008AE08093B800089594EA9093BC00909173
+:100D3000BC0097FFFCCF9091B900987F983021F0CC
+:100D4000903111F081E008958093BB0084E8809396
+:100D5000BC008091BC0087FFFCCF8091B900887FE8
+:100D6000883111F0803471F780E0089584E9809330
+:100D7000BC008091BC0084FDFCCF08958093BB0033
+:100D800084E88093BC008091BC0087FFFCCF9091E9
+:100D9000B900987F81E0983209F480E0089584E8F2
+:100DA0008093BC008091BC0087FFFCCF8091BB008A
+:100DB000089580910001811115C080E40E9494067D
+:100DC0008093000181110CC082E10E94BE068093D5
+:100DD0000001811105C08FEF0E94BE0680930001C3
+:100DE0000E94B60684B1807F84B985B1807F85B9C1
+:100DF0008AB1837F8AB98BB1837F8BB93E9846983D
+:100E000008950E943F06809300010E94D90680B396
+:100E10008C7080BB81B3836F81BBA8E3B1E0E6E453
+:100E2000F1E08EE08E0F11921D928E13FCCF0C9488
+:100E30002906BF92CF92DF92EF92FF920F931F93FA
+:100E4000CF93DF9380910001882379F0809137015F
+:100E50008F5F80933701811108C00E943F06809305
+:100E60000001811102C00E94D10508E311E0C0E039
+:100E7000D0E0DD24D39482E0C82EEE24E394F12C5C
+:100E8000C730D10500F580910001811164C080E474
+:100E90000E94940680930001811112C082E10E9499
+:100EA000BE068093000181110BC0C7010C2E01C04A
+:100EB000880F0A94EAF780950E94BE06809300018D
+:100EC0000E94B60648C0CA30A1F028F4C83059F0D4
+:100ED000C93061F005C0CC3089F070F0CD3089F0B8
+:100EE000209A289810C0219A29980DC0229A2A98F1
+:100EF0000AC0239A2B9807C0529A01C0539A5B9854
+:100F000002C03E9A469890EA9A95F1F79FB1799976
+:100F100002C082E001C080E091709D25982B7C99F1
+:100F200002C084E001C080E0892B7D9902C038E0D6
+:100F300001C030E0832B7E9902C020E101C020E097
+:100F4000822B9FB19095991F9927991F9295990F80
+:100F5000907E892B0FC080910001811149C080E4EF
+:100F60000E94940680930001882379F1B12C0E949D
+:100F7000B6068B2DF8019081981719F08083C092E6
+:100F800001010E94D90621960F5F1F4FCE30D10577
+:100F900009F076CF80910101882361F1815080931F
+:100FA0000101882339F08FE99FE00197F1F700C034
+:100FB000000020C0A6E4B1E0E8E3F1E0CF01825FE9
+:100FC00091919D938E13FCCF15C083E10E94BE06C4
+:100FD000809300018111CACF81E40E94940680931E
+:100FE00000018111C3CF0E94CF06B82EB094BFCFAD
+:100FF00080E0C0CF0E94CF0581E0DF91CF911F91AB
+:101000000F91FF90EF90DF90CF90BF900895E82F61
+:10101000F0E0EA5BFE4F808108950895089596E020
+:10102000799FF001112494E5899FE00DF11D1124B1
+:10103000E60FF11DEE0FFF1FEE57FD4F85919491C6
+:101040000895880F991FFC01EE5FFE4F85919491E2
+:101050000895880F991FFC01EE57FD4F85919491DB
+:1010600008950F931F93CF93DF93EC018115904365
+:1010700050F5C11580E2D80708F0B3C0CB3BD105CD
+:1010800090F4C83AD10508F05AC0C53AD10508F025
+:101090004BC0C430D10508F0BBC1219709F0B5C1E0
+:1010A00001E010E0F5C1CF3FD10511F008F0B0C16B
+:1010B000C03FD10508F092C0CE01805E910908972B
+:1010C00008F4A6C1A2C1C11591E5D907A8F4C230A0
+:1010D00020E5D20708F09EC0C11580E5D80709F4C5
+:1010E00085C008F091C0C11520E4D20708F08DC179
+:1010F000DD278E01106CCCC1C11580E8D80758F4EB
+:10110000C11590E7D90708F07CC1C11520E6D207C8
+:1011100008F422C17AC1C11580E9D80708F075C169
+:10112000DF708E01106AB4C1C53AD10509F472C1ED
+:10113000C63AD10509F071C102E810E4A9C1C83A64
+:10114000D10509F46DC1C93AD10509F46CC1CA3A97
+:10115000D10509F46BC1CB3AD10509F46AC1CC3A87
+:10116000D10509F469C1CD3AD10509F468C1C03B84
+:10117000D10509F467C1CE3AD10509F466C1CF3A69
+:10118000D10509F465C1C13BD10509F464C1C23B75
+:10119000D10509F463C1C33BD10509F462C1C43B65
+:1011A000D10509F461C1C53BD10509F460C1C63B55
+:1011B000D10509F45FC1C73BD10509F45EC1C83B45
+:1011C000D10509F45DC1C93BD10509F45CC1CA3B35
+:1011D000D10509F45BC100E014E45AC18E01106529
+:1011E00057C1CE019F700E94290853C10E948017E9
+:1011F0009FEF24E38CE0915020408040E1F700C055
+:1012000000000E94B81E44C18091CF01816080938C
+:10121000CF013EC10E946120811102C00E9447207F
+:101220000E947E2090E09093F0018093EF01C23005
+:1012300090E5D90721F48091EF01816086C0C43028
+:1012400020E5D20721F48091EF0182607EC0C63094
+:1012500080E5D80721F48091EF01846076C0C83022
+:1012600090E5D90719F48091EF0127C0CA3020E535
+:10127000D20721F48091EF01806167C0CC3080E516
+:10128000D80721F48091EF0180625FC0CE3090E5F5
+:10129000D90721F48091EF01806457C0C03120E567
+:1012A000D20721F48091EF0180684FC0C23180E500
+:1012B000D80729F48091EF018460886046C0C3306C
+:1012C00090E5D90721F48091EF018E7F3EC0C530B3
+:1012D00020E5D20721F48091EF018D7F36C0C73021
+:1012E00080E5D80721F48091EF018B7F2EC0C930B3
+:1012F00090E5D90719F48091EF0126C0CB3020E5A5
+:10130000D20721F48091EF018F7E1FC0CD3080E5A0
+:10131000D80721F48091EF018F7D17C0CF3090E581
+:10132000D90721F48091EF018F7B0FC0C13120E5F7
+:10133000D20721F48091EF018F7707C0C331D045E8
+:1013400031F48091EF018B7F877F8093EF01809153
+:10135000EF010E9482209CC08D2F99278F709927C2
+:1013600081309105D9F49E012370332702C0880F84
+:10137000991F2A95E2F79C688E0144E0000F111F27
+:101380004A95E1F700271370802B912B53E0CC0F87
+:10139000DD1F5A95E1F7C076DD272FC08230910519
+:1013A00031F4DC2FCC278E01016F106A71C08330BD
+:1013B000910569F4CE018370992701E010E002C025
+:1013C000000F111F8A95E2F7C8019C680FC00497AF
+:1013D00009F05EC0CE018370992701E010E002C0E1
+:1013E000000F111F8A95E2F7C8019A6823E0CC0F1D
+:1013F000DD1F2A95E1F7C07ED7708C010C2B1D2BC9
+:1014000047C0DF708E01106243C000E010E040C0B2
+:101410008E013EC001E810E43BC003E810E438C090
+:1014200002EE14E435C009EE14E432C00AEE14E40E
+:101430002FC005EB14E42CC006EB14E429C007EB25
+:1014400014E426C00CEC14E423C00DEC14E420C01A
+:1014500003E815E41DC00AE815E41AC002E915E422
+:1014600017C004E915E414C001E216E411C003E258
+:1014700016E40EC004E216E40BC005E216E408C050
+:1014800006E216E405C007E216E402C00AE216E42A
+:10149000C801DF91CF911F910F91089596E0799F38
+:1014A000F001112494E5899FE00DF11D1124E60F50
+:1014B000F11DEE0FFF1FEE57FD4F85919491803E79
+:1014C0009105E0F4803C910558F58133910509F4CC
+:1014D0006FC048F48932910509F463C08A329105DE
+:1014E00009F46DC072C089339105E9F08238910525
+:1014F000D1F08533910509F44DC067C0833E910555
+:1015000081F138F4803E9105B9F0823E9105D9F021
+:101510005CC0863E910561F1873E9105A1F155C001
+:101520000E94210808952091EF0120FD02C021FFB3
+:101530004CC080EE90E049C08091EF0180FFF9CF70
+:1015400089E390E042C08091EF0182FF0EC080915C
+:10155000EF0184FF03C080E090E037C083EE90E0AD
+:1015600034C08091EF0182FFF2CF82EE90E02DC077
+:101570008091EF0183FF0BC08091EF0184FDEBCFE1
+:1015800087EE90E022C08091EF0183FFF5CF86EED9
+:1015900090E01BC08091EF0185FF07C089E290E0D9
+:1015A00014C08091EF0185FFF9CF85E390E00DC075
+:1015B0008091EF0186FF07C08AE290E006C080912B
+:1015C000EF0186FFF9CF81E390E00E943108089592
+:1015D00008950C94E80A809164010895CF93DF93F5
+:1015E00000D01F92CDB7DEB79C018091E601843018
+:1015F00019F593E099833B832A839093E9008FEF59
+:101600009091E800815095FD06C095ED9A95F1F70F
+:1016100000008111F5CF8091E80085FF0DC040E00A
+:1016200050E063E070E0CE0101960E94580D809179
+:10163000E8008E778093E8000F900F900F90DF9175
+:10164000CF910895CF93DF9300D01F92CDB7DEB72F
+:101650002091E601243021F522E029839B838A83AF
+:1016600083E08093E9008FEF9091E800815095FD31
+:1016700006C095ED9A95F1F700008111F5CF8091A4
+:10168000E80085FF0DC040E050E063E070E0CE016F
+:1016900001960E94580D8091E8008E778093E800B3
+:1016A0000F900F900F90DF91CF9108952091E60158
+:1016B0002430F1F422E02093E9002FEF3091E8008C
+:1016C000215035FD06C035ED3A95F1F700002111A6
+:1016D000F5CF2091E80025FF0BC040E050E065E029
+:1016E00070E00E94580D8091E8008E778093E800AA
+:1016F0000895CF93DF93EC019091E601943009F0C7
+:1017000046C080910C018823D9F080910D01882377
+:10171000B9F09093E9008FEF9091E800815095FD2A
+:1017200006C095E19A95F1F700008111F5CF8091FF
+:10173000E80085FF2CC040E050E060E170E017C099
+:1017400081E08093E9008FEF9091E800815095FD52
+:1017500006C095ED9A95F1F700008111F5CF8091C3
+:10176000E80085FF14C040E050E068E070E0CE0182
+:101770000E94580D8091E8008E778093E80080E108
+:10178000FE01A4E5B1E001900D928A95E1F7DF91A9
+:10179000CF9108958091E501811109C00E94ED0E5D
+:1017A0000E944A0F8091E20084608093E2000895D5
+:1017B0001092E501089508950C94F1240E944E1EA4
+:1017C0000E94F7240E94F0110C94E90A42E061ECB7
+:1017D00081E00E94670E42E061EC82E00E94670EA9
+:1017E00042E061EC83E00E94670E42E161EC84E03C
+:1017F0000C94670E8091E801833009F455C030F4F1
+:10180000813071F0823009F48EC008958A3009F475
+:101810007AC08B3009F460C0893009F09CC020C0C8
+:101820008091E701813A09F096C08091E800877FB6
+:101830008093E8008091EB019091EC01892B21F4D9
+:1018400060E184E591E003C060E080E090E070E05A
+:101850000E94A30D8091E8008B778093E8000895A3
+:101860008091E701813209F076C08091EB0190917F
+:10187000EC01009719F0039709F06DC08091E80022
+:10188000877F8093E8008091E80082FD05C0809109
+:10189000E6018111F8CF5FC08091F100809364016F
+:1018A0008091E8008B7753C08091E701813A09F07D
+:1018B00052C08091EB019091EC01892B09F04BC053
+:1018C0008091E800877F8093E8008091E80080FFA6
+:1018D000FCCF80910C0136C08091E7018132D9F5AF
+:1018E0008091EB019091EC01892BA9F58091E800A2
+:1018F000877F8093E8000E949C0E8091E90180938D
+:101900000C010C9480178091E701813221F58091C0
+:10191000E800877F8093E8000E949C0E8091EA0196
+:101920008093650108958091E701813AA1F4809147
+:10193000E800877F8093E8008091E80080FFFCCF7B
+:10194000809165018093F1008091E8008E7780930B
+:10195000E8000C949C0E089584B7877F84BF88E1CB
+:101960000FB6F89480936000109260000FBE90E074
+:1019700080E80FB6F89480936100909361000FBEE9
+:101980000E943F120E94ED0E0E944A0F8091E200D9
+:1019900084608093E20078940E94D0110E944112EA
+:1019A00082E091E00E94EB110E94DF248091E60129
+:1019B000853069F40E940F1E8091E4018823B1F301
+:1019C0000E943A1E882391F30E94420DEFCF0E949D
+:1019D0004712ECCF292F332723303105C9F064F4A7
+:1019E0002130310581F02230310509F043C08DE608
+:1019F00090E026EA36E042C021323105F1F0223291
+:101A0000310541F137C082E190E023E137E036C093
+:101A100099278130910541F08230910541F0892B61
+:101A200049F5E2EAF6E005C0EAE8F6E002C0E2E7DE
+:101A3000F6E0849190E09F0121C06430D8F4E62F55
+:101A4000F0E0EE0FFF1FEE5DFE4F2081318189E057
+:101A500090E014C0643070F470E0FB01EE0FFF1FE3
+:101A6000E65EFE4F20813181FB01EA5EFE4F808100
+:101A700090E004C080E090E020E030E0FA013183A3
+:101A80002083089580E189BD82E189BD09B400FE0B
+:101A9000FDCF8091D8008F7D8093D8008091E000A9
+:101AA00082608093E0008091E00081FDFCCF08958A
+:101AB000CF92DF92EF92FF920F931F93CF93DF931A
+:101AC000EC018B016A010E94BB0E811133C0C1146D
+:101AD000D10439F0F60180819181081B190BC80FE0
+:101AE000D91FE12CF12C0115110519F18091E800A5
+:101AF00085FD16C08091E8008E778093E800C114C0
+:101B0000D10449F0F60180819181E80EF91EF1823D
+:101B1000E08285E00FC00E94BB0E882321F30AC03B
+:101B200089918093F10001501109FFEFEF1AFF0A2C
+:101B3000DACF80E0DF91CF911F910F91FF90EF906E
+:101B4000DF90CF9008952091ED013091EE0126179E
+:101B5000370748F06115710539F42091E8002E77B8
+:101B60002093E80001C0B90140E061157105A9F1B9
+:101B70002091E601222309F443C0253009F442C034
+:101B80002091E80023FD40C02091E80022FD32C0F2
+:101B90002091E80020FFE9CF4091F3002091F2006E
+:101BA00030E0342BFC01CF016115710559F028306C
+:101BB000310540F481918093F100615071092F5FEC
+:101BC0003F4FF1CF41E02830310509F040E020914E
+:101BD000E8002E772093E800C8CF4111C9CF0AC092
+:101BE0008091E601882361F0853061F08091E80002
+:101BF00083FD0AC08091E80082FFF2CF80E0089563
+:101C000082E0089583E0089581E008952091ED0138
+:101C10003091EE012617370748F06115710539F448
+:101C20002091E8002E772093E80001C0B901FC0163
+:101C300020E06115710591F18091E601882309F496
+:101C400040C0853009F43FC08091E80083FD3DC06D
+:101C50008091E80082FD2FC08091E80080FFE9CFED
+:101C60002091F3008091F20090E0922B61157105B4
+:101C700059F08830910540F424912093F100319679
+:101C8000615071090196F2CF21E0089709F020E038
+:101C90008091E8008E778093E800CBCF2111CCCFE4
+:101CA0000AC08091E601882361F0853061F080915F
+:101CB000E80083FD0AC08091E80082FFF2CF80E057
+:101CC000089582E0089583E0089581E00895982FB3
+:101CD000973058F59093E900981739F07091EC001F
+:101CE0002091ED005091F00003C0242F762F50E09A
+:101CF00021FF19C03091EB003E7F3093EB00309113
+:101D0000ED003D7F3093ED003091EB00316030937A
+:101D1000EB007093EC002093ED005093F0002091C5
+:101D2000EE0027FF07C09F5FD3CF8F708093E9003D
+:101D300081E0089580E008958091E70187FF11C058
+:101D40008091E80082FD05C08091E6018111F8CF05
+:101D500011C08091E8008B770BC08091E601882349
+:101D600049F08091E80080FFF8CF8091E8008E77FD
+:101D70008093E80008952091E4003091E50095E615
+:101D80004091EC00842F817040FF22C08091E800D8
+:101D900080FD1CC08091E601882391F0853091F090
+:101DA0008091EB0085FD10C04091E4005091E5006A
+:101DB0004217530729F39A01915011F784E00895CF
+:101DC00082E0089583E0089581E0089580E0089519
+:101DD0004091E80042FFDECF08950E945B0F0E9411
+:101DE000630FE0EEF0E0808181608083E8EDF0E059
+:101DF00080818F77808319BCA7EDB0E08C918E7FB6
+:101E00008C9380818F7E80831092E50108950F93DB
+:101E10001F93CF93DF930E945B0F0E94630FC8ED67
+:101E2000D0E088818F7788838881806888838881E3
+:101E30008F7D888319BC1092E6011092E201109206
+:101E4000E4011092E30100EE10E0F80180818B7F45
+:101E5000808388818160888342E060E080E00E9426
+:101E6000670EE1EEF0E080818E7F8083E2EEF0E0AD
+:101E7000808181608083808188608083F801808197
+:101E80008E7F8083888180618883DF91CF911F91CD
+:101E90000F910895E8EDF0E080818F7E8083E7ED7B
+:101EA000F0E080818160808384E082BF81E0809364
+:101EB000E5010C94070FE8EDF0E080818E7F8083D0
+:101EC0001092E20008951092DA001092E100089555
+:101ED0001F920F920FB60F9211242F933F934F939F
+:101EE0005F936F937F938F939F93AF93BF93EF9382
+:101EF000FF938091E10082FF0BC08091E20082FF9E
+:101F000007C08091E1008B7F8093E1000E94CF1198
+:101F10008091DA0080FF1FC08091D80080FF1BC035
+:101F20008091DA008E7F8093DA008091D90080FF63
+:101F30000DC080E189BD82E189BD09B400FEFDCFFD
+:101F400081E08093E6010E94CA0B05C019BC109283
+:101F5000E6010E94D80B8091E10080FF19C08091BA
+:101F6000E20080FF15C08091E2008E7F8093E20046
+:101F70008091E20080618093E2008091D8008062CD
+:101F80008093D80019BC85E08093E6010E94DC0BA9
+:101F90008091E10084FF30C08091E20084FF2CC07A
+:101FA00080E189BD82E189BD09B400FEFDCF809149
+:101FB000D8008F7D8093D8008091E1008F7E809340
+:101FC000E1008091E2008F7E8093E2008091E20048
+:101FD00081608093E2008091E201882311F084E027
+:101FE00007C08091E30087FD02C081E001C083E06B
+:101FF0008093E6010E94DE0B8091E10083FF29C0FF
+:102000008091E20083FF25C08091E100877F80936B
+:10201000E10082E08093E6011092E2018091E1000C
+:102020008E7F8093E1008091E2008E7F8093E200BA
+:102030008091E20080618093E20042E060E080E015
+:102040000E94670E8091F00088608093F0000E94EB
+:10205000DB0BFF91EF91BF91AF919F918F917F919A
+:102060006F915F914F913F912F910F900FBE0F9005
+:102070001F9018951F920F920FB60F9211242F9355
+:102080003F934F935F936F937F938F939F93AF9300
+:10209000BF93CF93DF93EF93FF93C091E900CF708D
+:1020A0008091EC00D82FD17080FDD0E81092E9002B
+:1020B0008091F000877F8093F00078940E947E10DA
+:1020C0001092E9008091F00088608093F000CD2BA1
+:1020D000CF70C093E900FF91EF91DF91CF91BF9155
+:1020E000AF919F918F917F916F915F914F913F91B0
+:1020F0002F910F900FBE0F901F9018951F93CF93A5
+:10210000DF93CDB7DEB7AA970FB6F894DEBF0FBE48
+:10211000CDBFE7EEF1E088E08E0F9091F100919352
+:102120008E13FBCF0E94FA0B8091E80083FF1FC142
+:102130008091E7019091E801492F50E04A30510524
+:1021400008F015C1FA01EA59FF4F0C94792680383E
+:1021500081F0823809F00BC18091EB018F70809380
+:10216000E9008091EB0085FB882780F91092E90057
+:1021700006C08091E3019091E401911182609091F9
+:10218000E800977F9093E8008093F1001092F100AF
+:10219000C8C0282F2D7F09F0EAC0882319F08230AB
+:1021A00061F0E5C08091E901813009F0E0C0933031
+:1021B00009F080E08093E4012BC08091E901811156
+:1021C00027C08091EB018F7009F4D1C08093E900A2
+:1021D0002091EB0020FF1CC0933021F48091EB0094
+:1021E000806214C09091EB0090619093EB0021E02D
+:1021F00030E0A90102C0440F551F8A95E2F74093D1
+:10220000EA001092EA008091EB0088608093EB0076
+:102210001092E9008091E800877F86C08111A7C0F5
+:102220001091E9011F778091E3008078812B8093E2
+:10223000E3008091E800877F8093E8000E949C0E75
+:102240008091E80080FFFCCF8091E300806880935C
+:10225000E300111102C082E001C083E08093E60137
+:1022600086C08058823008F082C08091E901909148
+:10227000EA018C3D53E0950779F583E08A838AE291
+:1022800089834FB7F894DE01139620E03EE051E2D7
+:10229000E32FF0E050935700E49120FF03C0E29554
+:1022A000EF703F5FEF708E2F90E0EA3010F0C7962E
+:1022B00001C0C0968D939D932F5F243149F74FBF86
+:1022C0008091E800877F8093E8006AE270E0CE01A9
+:1022D00001960E94A30D14C0AE014F5F5F4F609145
+:1022E000EB010E94EA0CBC01892B09F440C09091DB
+:1022F000E800977F9093E80089819A810E94060EFA
+:102300008091E8008B778093E80031C0803879F5C0
+:102310008091E800877F8093E8008091E2018093BC
+:10232000F1008091E8008E778093E8000E949C0E77
+:102330001EC081111CC09091E9019230C0F48091BF
+:10234000E800877F8093E8009093E2010E949C0E52
+:102350008091E201811106C08091E30087FD02C0F7
+:1023600081E001C084E08093E6010E94E60B809149
+:10237000E80083FF0AC08091E800877F8093E8002F
+:102380008091EB0080628093EB00AA960FB6F894E0
+:10239000DEBF0FBECDBFDF91CF911F91089508958D
+:1023A000CF938091E6018823A1F0C091E900CF701E
+:1023B0009091EC00892F817090FD80E8C82B1092DD
+:1023C000E9008091E80083FD0E947E10CF70C093E9
+:1023D000E900CF91089590936B0180936A0108956D
+:1023E000E0916A01F0916B01309721F00190F0814A
+:1023F000E02D099480E00895E0916A01F0916B016D
+:10240000309721F00280F381E02D09940895E09146
+:102410006A01F0916B01309721F00480F581E02D85
+:1024200009940895209168013091690182179307FA
+:1024300071F09093690180936801E0916A01F091D5
+:102440006B01309721F00680F781E02D0994089503
+:1024500020916601309167018217930771F0909384
+:10246000670180936601E0916A01F0916B013097FA
+:1024700021F00084F185E02D0994089508950C94CD
+:102480003E120E94541E0E9401070C941A1FCF9204
+:10249000DF92EF92FF920F931F93CF93DF93CDB70D
+:1024A000DEB72B970FB6F894DEBF0FBECDBF0E94EC
+:1024B00019078DE6C82E81E0D82E00E010E0E02E4E
+:1024C000802F0E940708F60141916F01F42EF82633
+:1024D000B1F40F5F1F4F0E30110589F78FEF89831D
+:1024E0008A831B820E945D1E8160782F9D838C836E
+:1024F00049815A816B818D810E94EA1240C090917E
+:10250000CF0191FF04C08B870E940D088B8520E0CE
+:1025100030E04F2D50E0922FBA01022E02C0759587
+:1025200067950A94E2F760FF24C02E83EF8221E0D2
+:1025300030E0690102C0CC0CDD1C9A95E2F790E016
+:102540008C219D21892B09F420E028870E945D1EA3
+:102550008160782F9A8789874E815F8168858A8517
+:102560000E94EA12F801E359FE4F8081C826C0821A
+:1025700006C02F5F3F4F2630310569F6AACF0E9473
+:10258000012210916C010E94F0111817A1F00E9415
+:10259000F01180936C012B960FB6F894DEBF0FBE3E
+:1025A000CDBFDF91CF911F910F91FF90EF90DF9002
+:1025B000CF900C94E90A2B960FB6F894DEBF0FBEAD
+:1025C000CDBFDF91CF911F910F91FF90EF90DF90E2
+:1025D000CF900895CF93DF93CDB7DEB72B970FB68B
+:1025E000F894DEBF0FBECDBF4F83588769877A87C7
+:1025F0008B87DE01119686E0FD0111928A95E9F73D
+:1026000085E0FE01379601900D928A95E1F74981A8
+:102610005A816B817C818D819E810E941A1A2B9632
+:102620000FB6F894DEBF0FBECDBFDF91CF910895F6
+:102630000895CF93882309F4C2C0C82F823859F473
+:102640000E94F01181FDBBC089E30E94C31C0E945F
+:10265000901D89E30CC0833879F40E94F01180FD4D
+:10266000AEC083E50E94C31C0E94901D83E50E94BA
+:10267000051DCF910C94901D843859F40E94F011DF
+:1026800082FD9DC087E40E94C31C0E94901D87E4C8
+:10269000EECF8CEF8C0F813A48F48C2F0E944424AB
+:1026A00081118DC08C2F0E94C31CE3CF80E28C0F60
+:1026B000883048F4C77081E001C0880FCA95EAF7F6
+:1026C0000E94491DD6CF8BE58C0F833078F4C53A34
+:1026D00029F0C63A31F083E890E005C081E890E047
+:1026E00002C082E890E0CF910C94121288E58C0F22
+:1026F000833108F064C0C83A39F1C93A41F1CA3AA5
+:1027000049F1CB3A51F1CC3A59F1CD3A61F1C03BA4
+:1027100069F1CE3A71F1CF3A79F1C13B81F1C23B17
+:1027200089F1C33B91F1C43B99F1C53BA1F1C63B93
+:10273000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BF3
+:10274000C9F180E090E038C082EE90E035C089EEBB
+:1027500090E032C08AEE90E02FC085EB90E02CC074
+:1027600086EB90E029C087EB90E026C08CEC90E0EF
+:1027700023C08DEC90E020C083E891E01DC08AE882
+:1027800091E01AC082E991E017C084E991E014C099
+:1027900081E292E011C083E292E00EC084E292E016
+:1027A0000BC085E292E008C086E292E005C087E2B5
+:1027B00092E002C08AE292E0CF910C942812CF916D
+:1027C0000895882309F44BC0823859F40E94F0110F
+:1027D00081FF45C089E30E94C31C0E94901D89E3CC
+:1027E0000CC0833871F40E94F01180FF38C083E57B
+:1027F0000E94C31C0E94901D83E50E94051D0C943D
+:10280000901D843859F40E94F01182FF28C087E49B
+:102810000E94C31C0E94901D87E4EFCF9CEF980F8D
+:10282000913A58F390E2980F983050F4877091E005
+:1028300001C0990F8A95EAF7892F0E944F1DDFCFBB
+:102840009BE5980F933020F480E090E00C941212F6
+:10285000885A833120F480E090E00C942812089587
+:10286000882321F00E94491D0C94901D089588230F
+:1028700021F00E944F1D0C94901D0895BF92CF929D
+:10288000DF92EF92FF920F931F93CF93DF9300D0CD
+:1028900000D000D0CDB7DEB725E0FC01DE011196F7
+:1028A00001900D922A95E1F7FC01D08011810281FF
+:1028B000258122952F7043815481452B09F4FCC258
+:1028C0001F3F21F4FFEFDF1609F4F6C27C012E83CF
+:1028D0000E941813D9821A8369817A81802F0E94FD
+:1028E000BF1C182FB92E0E94741C0E943B1B2E8106
+:1028F000002319F00E94661D2E81EB2DE295EF70EA
+:10290000F0E0E059FF4F0C9479268B2D807F9B2DB2
+:102910009F70F92E882319F0F29480EFF82200239B
+:1029200089F0FF2009F475C280E2810F883020F41D
+:102930008F2D0E94491D03C08F2D0E94591D0E949A
+:10294000901D67C2812F0E94E113FF2009F4B4C2D9
+:10295000105E8F2D183018F40E944F1D02C00E9487
+:102960005F1D26960FB6F894DEBF0FBECDBFDF9178
+:10297000CF911F910F91FF90EF90DF90CF90BF907C
+:102980000C94901D3B2D307F8B2D8F70303211F0C9
+:102990008295807F112319F0113021F12CC0002382
+:1029A000B9F0222309F4A0C1213009F09DC1269677
+:1029B0000FB6F894DEBF0FBECDBFDF91CF911F9150
+:1029C0000F91FF90EF90DF90CF90BF900C94791D06
+:1029D000222319F0213009F46FC28E830E947C1DDE
+:1029E0008E8196C1002321F0223008F065C27CC19F
+:1029F000211162C28DC1002321F0222309F474C188
+:102A000008C2222309F484C119C22B2D26952695CC
+:102A1000237030E02115310521F021303105D1F04E
+:102A20004BC2002321F0812F9B2D937002C080E0C8
+:102A300090E026960FB6F894DEBF0FBECDBFDF91B3
+:102A4000CF911F910F91FF90EF90DF90CF90BF90AB
+:102A50000C941212002321F0812F9B2D937002C041
+:102A600080E090E026960FB6F894DEBF0FBECDBF93
+:102A7000DF91CF911F910F91FF90EF90DF90CF905A
+:102A8000BF900C942812812F002319F00E94092175
+:102A900002C00E94712126960FB6F894DEBF0FBEC9
+:102AA000CDBFDF91CF911F910F91FF90EF90DF90FD
+:102AB000CF90BF900C94F6218B2D837009F07BC0D2
+:102AC0000111FAC1812F829586958770880F880F32
+:102AD000912F9F70C92ED12CE12CF12C082E04C00F
+:102AE000CC0CDD1CEE1CFF1C0A94D2F714FF12C0A4
+:102AF0004FE050E060E070E004C0440F551F661FD7
+:102B0000771F8A95D2F7CB01BA01609570958095B1
+:102B1000909503C060E070E0CB012B2D26952695A3
+:102B20002370422F50E042305105D9F04330510517
+:102B300069F16C297D298E299F294130510551F178
+:102B400026960FB6F894DEBF0FBECDBFDF91CF91B2
+:102B50001F910F91FF90EF90DF90CF90BF900C945A
+:102B6000621B6C297D298E299F2926960FB6F89421
+:102B7000DEBF0FBECDBFDF91CF911F910F91FF90B0
+:102B8000EF90DF90CF90BF900C947E1B0E94621B51
+:102B9000C701B60126960FB6F894DEBF0FBECDBFB3
+:102BA000DF91CF911F910F91FF90EF90DF90CF9029
+:102BB000BF900C94461B002319F08B2D817001C02F
+:102BC0008695882309F478C1812F82958695877030
+:102BD000880F880F912F9F70C92ED12CE12CF12CDA
+:102BE000082E04C0CC0CDD1CEE1CFF1C0A94D2F78E
+:102BF00014FF12C04FE050E060E070E004C0440FEA
+:102C0000551F661F771F8A95D2F7CB01BA016095D1
+:102C100070958095909503C060E070E0CB012B2DFE
+:102C2000269526952370422F50E042305105D9F069
+:102C30004330510569F16C297D298E299F29413046
+:102C4000510551F126960FB6F894DEBF0FBECDBFE9
+:102C5000DF91CF911F910F91FF90EF90DF90CF9078
+:102C6000BF900C943C1C6C297D298E299F292696A7
+:102C70000FB6F894DEBF0FBECDBFDF91CF911F918D
+:102C80000F91FF90EF90DF90CF90BF900C94581C65
+:102C90000E943C1CC701B60126960FB6F894DEBF11
+:102CA0000FBECDBFDF91CF911F910F91FF90EF909D
+:102CB000DF90CF90BF900C94201C103FD1F118F4FE
+:102CC000103E50F4A1C0123F09F463C008F44CC098
+:102CD000133F09F473C098C01F708B2D8F710023B0
+:102CE000A1F00E94B91B812F26960FB6F894DEBF83
+:102CF0000FBECDBFDF91CF911F910F91FF90EF904D
+:102D0000DF90CF90BF900C9430140E94DA1B812F7B
+:102D100026960FB6F894DEBF0FBECDBFDF91CF91E0
+:102D20001F910F91FF90EF90DF90CF90BF900C9488
+:102D300037140023A9F02111BFC08B2D8F71269667
+:102D40000FB6F894DEBF0FBECDBFDF91CF911F91BC
+:102D50000F91FF90EF90DF90CF90BF900C94FF1BEE
+:102D6000223008F0A9C0E9CF0023A9F08B2D8F7184
+:102D700026960FB6F894DEBF0FBECDBFDF91CF9180
+:102D80001F910F91FF90EF90DF90CF90BF900C9428
+:102D9000B91B002359F38B2D8F7126960FB6F8942B
+:102DA000DEBF0FBECDBFDF91CF911F910F91FF907E
+:102DB000EF90DF90CF90BF900C94DA1B002399F036
+:102DC0008B2D8F7126960FB6F894DEBF0FBECDBF48
+:102DD000DF91CF911F910F91FF90EF90DF90CF90F7
+:102DE000BF900C94A41B26960FB6F894DEBF0FBEBE
+:102DF000CDBFDF91CF911F910F91FF90EF90DF90AA
+:102E0000CF90BF900C949A1B0023A9F0222309F4C1
+:102E1000ADCF812F26960FB6F894DEBF0FBECDBF83
+:102E2000DF91CF911F910F91FF90EF90DF90CF90A6
+:102E3000BF900C941913222309F4ADCF812F26964D
+:102E40000FB6F894DEBF0FBECDBFDF91CF911F91BB
+:102E50000F91FF90EF90DF90CF90BF900C94E11313
+:102E60004B2D4F70612FC7010E94760426960FB636
+:102E7000F894DEBF0FBECDBFDF91CF911F910F91B0
+:102E8000FF90EF90DF90CF90BF900C94BE1A4B2D27
+:102E90004F70612FC70126960FB6F894DEBF0FBEA4
+:102EA000CDBFDF91CF911F910F91FF90EF90DF90F9
+:102EB000CF90BF900C940E0826960FB6F894DEBF04
+:102EC0000FBECDBFDF91CF911F910F91FF90EF907B
+:102ED000DF90CF90BF9008950E94661D0E94761DDE
+:102EE0000E943B1D0E94901D0E94A7220E94F62175
+:102EF00080E090E00E94121280E090E00C94281292
+:102F00000E94561D0C946C170E94B41C292F229508
+:102F10002F7030E02C3031054CF42A3031056CF440
+:102F2000225031092230310588F407C02C30310598
+:102F300049F02F30310531F009C0803E48F0803F24
+:102F400029F406C093FB882780F9089580E008954E
+:102F500081E00895CF93DF9300D000D01F92CDB7CA
+:102F6000DEB70F900F900F900F900F90DF91CF91E1
+:102F70000895CF93DF9300D000D000D0CDB7DEB757
+:102F800026960FB6F894DEBF0FBECDBFDF91CF916E
+:102F900008951F93CF93DF93C0917B0116E080913A
+:102FA0007C01C81799F0D0E01C9FF0011D9FF00D27
+:102FB0001124E358FE4F40815181628173818481E5
+:102FC00095810E94B9172196C770E9CFDF91CF9103
+:102FD0001F9108954091AD015091AE016091AF01F4
+:102FE0007091B0018091B1019091B2010C94B91728
+:102FF0008091B20182958F7009F054C08091AF0129
+:10300000882309F44FC080917B01A0917C016091DD
+:10301000AD017091AE014091B0015091B101B6E0A7
+:103020008A1709F43FC090E041155105C1F17F3F77
+:1030300011F46F3FA1F1B89FF001B99FF00D112479
+:10304000E358FE4F218172132AC02081621327C0EA
+:103050002281211124C0238134812417350710F4E3
+:1030600021503109241B350B283C3105C0F4209137
+:10307000B2012F7020612093B20126E0289FF00159
+:10308000299FF00D1124EE57FE4F80818F708061D3
+:1030900080838DEA91E00E943E140C94C91701963A
+:1030A0008770BECF0895CF92DF92EF92FF920F9379
+:1030B0001F93CF93DF93CDB7DEB762970FB6F89427
+:1030C000DEBF0FBECDBF8C0185E0F801DE011D968D
+:1030D00001900D928A95E1F7D8014C9111965C917F
+:1030E000119712966C9112971396CD90DC901497CD
+:1030F0003091AD017091AE018091B0019091B1011C
+:10310000009709F46BC17F3F19F43F3F09F466C192
+:10311000E090AF01EE2009F4C0C02091B201C816C2
+:10312000D90628F0F601E81BF90BCF0104C0809501
+:1031300090958C0D9D1DFF24F394883C910578F0AB
+:10314000F12C207F09F0C6C07C2DD98AC88A8989D4
+:103150000E94AA178DEA91E00E943E14B1C0822F0E
+:10316000807F09F046C0751314C0341312C061117A
+:1031700010C02F7020612093B2010E94EA178DEADF
+:1031800091E00E943E148091B201D80115968C9373
+:103190002EC0CD2819F15F3F11F44F3FF9F0F62E04
+:1031A00061111CC080917B0120917C0136E0821767
+:1031B00009F45AC090E0389FF001399FF00D1124B6
+:1031C000E358FE4F7181571306C07081471303C047
+:1031D0007281711103C001968770E9CFF62E6623C4
+:1031E00009F418C18091B20181608093B201F12C81
+:1031F00011C1751308C0341306C0611104C0809159
+:10320000B201D801C3C04D875E878D859E856A8BCC
+:103210000E9484176A898823E1F16623D1F1209105
+:10322000B201822F82958F7090E0029774F08091A6
+:10323000AD019091AE0198878F831986DB86CA868F
+:103240002C87CE0107960E943E1486E0F801ADEA75
+:10325000B1E001900D928A95E1F70E94F8170E9463
+:10326000EA17FF24F394D6C04D875E878D859E852F
+:103270000E94B41C292F22952F7030E02230310596
+:103280000CF0BCC09F7009F0B6C0805E883008F4B6
+:10329000C1C0C8010E943E14E4CFC816D90608F484
+:1032A00053C0F601E81BF90BCF01883C910508F4E7
+:1032B00050C0F12C7C2DD98AC88A89890E94AA170E
+:1032C000EDEAF1E086E0DF011D928A95E9F70E94C0
+:1032D000EA17A0C0751314C0341312C0611110C0D6
+:1032E0008091B201F8018583C8010E943E1486E0F6
+:1032F000EDEAF1E0DF011D928A95E9F7FE2C8AC024
+:103300004D875E878D859E856A8B0E9484176A89AA
+:10331000882309F4BECF662309F4BBCF2091B20104
+:10332000822F82958F7090E002970CF48ECF80915F
+:10333000AD019091AE019A8389831B82DD82CC829C
+:103340002E83CE0101967FCF809590958C0D9D1D8B
+:10335000ACCFF62E662309F49CCF75132EC0341320
+:103360002CC02091B20120FD1FC0822F82958F704A
+:10337000D9F0D80115962C9315978F3049F08F5FAF
+:10338000982F9295907F822F8F70892B15968C9312
+:10339000C8010E943E1486E0F801ADEAB1E0019058
+:1033A0000D928A95E1F793CF86E0F801ADEAB1E09E
+:1033B00001900D928A95E1F72DC04D875E878D852E
+:1033C0009E850E948417811140CF8091B201816057
+:1033D0008093B201C8010E943E141CC0662309F408
+:1033E00058CF4D875E878D859E850E9484178823E0
+:1033F00009F44FCF2ACF811148CF0CC024303105BA
+:103400000CF047CF9F7009F440CFF8019581907F71
+:1034100009F03BCF8F2D62960FB6F894DEBF0FBE3A
+:10342000CDBFDF91CF911F910F91FF90EF90DF9073
+:10343000CF9008951F93CF93DF93CDB7DEB72C972E
+:103440000FB6F894DEBF0FBECDBF4F835887698794
+:103450007A878B879C87CE0107960E945318882312
+:1034600069F08F8198852A853B85232BF1F19F3F59
+:1034700009F063C08F3F09F060C037C086E0FE01ED
+:103480003796DE01119601900D928A95E1F76F81D2
+:103490007885EA85FB85309741F17F3F11F46F3FD6
+:1034A00021F120917C0130E0C901019687709927B4
+:1034B00040917B0150E08417950709F447C0698368
+:1034C0007A83FD83EC8396E0929FD001939FB00DA9
+:1034D0001124A358BE4FFE01319601900D929A958A
+:1034E000E1F780937C010E94C91716E080917B016F
+:1034F00090917C018917C1F1189FC0011124835854
+:103500009E4F0E945318882379F1E0917B011E9F02
+:10351000F0011124E358FE4F408151816281738193
+:10352000848195810E94B91780917B0190E001967A
+:103530008770992780937B01D9CF4F815885698502
+:103540007A858B859C850E94B917CFCF0E94801702
+:1035500010927C0110927B01EDEAF1E086E0DF0140
+:103560001D928A95E9F7C1CF2C960FB6F894DEBF6D
+:103570000FBECDBFDF91CF911F910895EF92FF92C3
+:103580000F931F93CF93DF938C01892B09F46CC0A9
+:10359000F12CEE24E394E8012196F801849184371C
+:1035A00040F4843008F051C0813081F0823019F14C
+:1035B0005BC0853709F444C0A8F19CE7980F9037A9
+:1035C00008F052C08F770E94E11341C00E5F1F4F79
+:1035D000FE01C49180E28C0F883048F4C7708E2DB4
+:1035E00001C0880FCA95EAF70E94691D14C08C2F8C
+:1035F0000E9419132DC00E5F1F4FFE01C49180E27F
+:103600008C0F883058F4C7708E2D01C0880FCA9572
+:10361000EAF70E946F1D0E94901D1AC08C2F0E9415
+:10362000E11316C00E5F1F4FFE01C491CC2381F041
+:103630008FE99FE00197F1F700C00000C150F6CF7D
+:103640000E5F1F4FFE01F49003C00E9419138E01FC
+:103650008F2D882309F49FCFEFE9FFE03197F1F731
+:1036600000C000008150F5CFDF91CF911F910F91E5
+:10367000FF90EF90089508956093B7017093B8019B
+:103680008093B9019093BA010C946C170F931F9318
+:103690000091B7011091B8012091B9013091BA01A0
+:1036A000DC01CB01802B912BA22BB32B8093B70194
+:1036B0009093B801A093B901B093BA011F910F91F3
+:1036C0000C946C170F931F930091B7011091B801E0
+:1036D0002091B9013091BA01DC01CB018023912303
+:1036E000A223B3238093B7019093B801A093B901AB
+:1036F000B093BA011F910F910C946C170F931F9305
+:103700000091B7011091B8012091B9013091BA012F
+:10371000DC01CB0180279127A227B3278093B70133
+:103720009093B801A093B901B093BA011F910F9182
+:103730000C946C171092B3011092B4011092B50161
+:103740001092B6010C946C1741E050E060E070E01C
+:1037500004C0440F551F661F771F8A95D2F7409308
+:10376000B3015093B4016093B5017093B6010C940A
+:103770006C1741E050E060E070E004C0440F551F5A
+:10378000661F771F8A95D2F78091B3019091B4019B
+:10379000A091B501B091B601482B592B6A2B7B2B18
+:1037A0004093B3015093B4016093B5017093B60197
+:1037B0000C946C1741E050E060E070E004C0440FEE
+:1037C000551F661F771F8A95D2F7409550956095D3
+:1037D00070958091B3019091B401A091B501B09121
+:1037E000B601482359236A237B234093B3015093A6
+:1037F000B4016093B5017093B6010C946C1741E06D
+:1038000050E060E070E004C0440F551F661F771F52
+:103810008A95D2F78091B3019091B401A091B5013E
+:10382000B091B601482759276A277B274093B301F7
+:103830005093B4016093B5017093B6010C946C176A
+:103840000F931F930091B3011091B4012091B50122
+:103850003091B601DC01CB01802B912BA22BB32B35
+:103860008093B3019093B401A093B501B093B601D6
+:103870001F910F910C946C170F931F930091B3013C
+:103880001091B4012091B5013091B601DC01CB015A
+:1038900080239123A223B3238093B3019093B40197
+:1038A000A093B501B093B6011F910F910C946C17C2
+:1038B0000F931F930091B3011091B4012091B501B2
+:1038C0003091B601DC01CB0180279127A227B327D5
+:1038D0008093B3019093B401A093B501B093B60166
+:1038E0001F910F910C946C170895CF92DF92EF9275
+:1038F000FF920F931F93CF93DF938C01C090B7017A
+:10390000D090B801E090B901F090BA018091B30174
+:103910009091B401A091B501B091B601C82AD92AFD
+:10392000EA2AFB2ACFE1D0E0D701C6010C2E04C061
+:10393000B695A795979587950A94D2F780FF06C00C
+:10394000B8018C2F0E944E0A019721F4219760F74D
+:1039500080E001C08C2FDF91CF911F910F91FF90DC
+:10396000EF90DF90CF900895CF93DF93EC010E940A
+:10397000751CBE010E944E0ADF91CF910895CB01C4
+:103980000E94B41C089590910C01992321F090910C
+:103990000D01911109C020910E0130910F01F90123
+:1039A00032969FEF40E01FC0982F9695969596957A
+:1039B0009F3050F5E0910E01F0910F01E90FF11DDC
+:1039C000877021E030E0A90102C0440F551F8A959D
+:1039D000E2F7CA019181892B818308959F3F39F0D5
+:1039E0004F5F4E3041F051915813F8CF0DC0511137
+:1039F000F7CF942FF5CF9F3F39F0F901E90FF11D73
+:103A000097FDFA9582830895089590910C0199236A
+:103A100021F090910D01911109C020910E0130917A
+:103A20000F01F9013296205F3F4F1FC0982F9695E6
+:103A3000969596959F30F0F4E0910E01F0910F016C
+:103A4000E90FF11D877021E030E0A90102C0440FA9
+:103A5000551F8A95E2F7CA01809591818923818358
+:103A600008953196E217F30729F090819813F9CF62
+:103A70001082F7CF089581E090E0E0910E01F0917F
+:103A80000F01E80FF91F1082019680319105A9F707
+:103A900008959091CE01892B8093CE010895809551
+:103AA0009091CE0189238093CE0108951092CE018A
+:103AB00008959091CD01892B8093CD010895809533
+:103AC0009091CD0189238093CD0108951092CD016D
+:103AD00008959091CC01892B8093CC010895809515
+:103AE0009091CC0189238093CC0108951092CC0150
+:103AF00008958093BB0108951092BB0108958091B1
+:103B00000E0190910F01FC0131969C01205F3F4F07
+:103B100080E0919191118F5FE217F307D1F708953B
+:103B2000E0910E01F0910F018091CE018083E09130
+:103B30000E01F0910F0190818091CD01892B80833E
+:103B4000E0910E01F0910F0190818091CC01892BC1
+:103B500080838091BB01882361F0E0910E01F09198
+:103B60000F019081892B80830E947F1D811110920B
+:103B7000BB0180910E0190910F010C94FC11CF922A
+:103B8000DF92EF92FF926C01EE24FF24C114D10466
+:103B9000E104F10421F0C701B60120E101C020E0F9
+:103BA000C72ED82EE92EFF24C114D104E104F1045C
+:103BB00019F0285FC701B6016B017C0154E0F6944F
+:103BC000E794D794C7945A95D1F7C114D104E1046E
+:103BD000F10419F02C5FC701B6016B017C0142E0D2
+:103BE000F694E794D794C7944A95D1F7C114D104B9
+:103BF000E104F10419F02E5FC701B601DC01CB012D
+:103C0000B695A79597958795892B8A2B8B2B09F0CD
+:103C10002F5F822FFF90EF90DF90CF9008958091DB
+:103C2000E601843021F11092D00120E488E190E097
+:103C30000FB6F894A895809360000FBE20936000A3
+:103C400080E00E94E90A83B7817F846083BF83B7E5
+:103C5000816083BF7894889583B78E7F83BF88E126
+:103C60000FB6F89480936000109260000FBE089524
+:103C700008950895CF930E94381E0E9419070E944C
+:103C8000391EC0E08C2F0E940708811104C0CF5F4D
+:103C9000CE30C1F701C081E0CF9108950E94801716
+:103CA0000E94F0110C94E90A82E084BD93E095BD76
+:103CB0009AEF97BD80936E0008952FB7F894809186
+:103CC000D1019091D201A091D301B091D4012FBF25
+:103CD0000895CF92DF92EF92FF920F931F932FB729
+:103CE000F8944091D1015091D2016091D30170912B
+:103CF000D4012FBF6A017B01EE24FF248C0120E058
+:103D000030E0C016D106E206F30610F44150510926
+:103D10009A01281B390BC9011F910F91FF90EF9059
+:103D2000DF90CF9008951F920F920FB60F9211243B
+:103D30008F939F93AF93BF938091D1019091D201C4
+:103D4000A091D301B091D4010196A11DB11D809322
+:103D5000D1019093D201A093D301B093D401BF912C
+:103D6000AF919F918F910F900FBE0F901F9018955C
+:103D70000E94ED0EF8942FEF87EA91E621508040E3
+:103D80009040E1F700C0000087E090EBDC018093F9
+:103D9000F0019093F101A093F201B093F3019CE044
+:103DA00088E10FB6F894A895809360000FBE9093B9
+:103DB0006000FFCFEF92FF920F931F93CF93DF939B
+:103DC000D82FC0E08C2F0E94070800E010E0E82EFA
+:103DD000F12CC701002E02C0959587950A94E2F751
+:103DE00080FD06C00F5F1F4F0630110591F709C017
+:103DF000602F7C2F80E00E940F08D813F3CF81E062
+:103E000004C0CF5FCE30F1F680E0DF91CF911F91FB
+:103E10000F91FF90EF900895CF93C82F8CE20E94EE
+:103E2000DA1E882321F08C2FCF910C94DA1E80E0CB
+:103E3000CF910895CF930E946120811102C00E940A
+:103E40004720C5E6C15049F00E9419078FE39CE95D
+:103E50000197F1F700C00000F5CF89E20E940C1F26
+:103E6000811113C18AE20E940C1F81110E94472018
+:103E700085E00E940C1F81110E94B81E0E946C20D8
+:103E80008093CF0187E00E940C1F8823A9F18BE16A
+:103E90000E940C1F882351F08091CF0181FB2227C3
+:103EA00020F991E0922790FB81F90EC08EE00E94EC
+:103EB0000C1F882361F08091CF0182FB222720F91B
+:103EC00091E0922790FB82F98093CF0115C080E1A9
+:103ED0000E940C1F9091CF01882341F093FB222771
+:103EE00020F981E0822780FB93F904C0892F809517
+:103EF00080FB90F99093CF018091CF010E947020B8
+:103F00000E947E208093EF0180EE0E940C1F882388
+:103F100041F08091EF01982F909590FB80F980936C
+:103F2000EF0189E30E940C1F882359F08091EF0173
+:103F300081FB222720F991E0922790FB81F9809361
+:103F4000EF0182EE0E940C1F882359F08091EF014F
+:103F500082FB222720F991E0922790FB82F980933F
+:103F6000EF0186EE0E940C1F882359F08091EF012B
+:103F700083FB222720F991E0922790FB83F980931D
+:103F8000EF0183EE0E940C1F882359F08091EF010E
+:103F900084FB222720F991E0922790FB84F98093FB
+:103FA000EF0185E30E940C1F882359F08091EF01F7
+:103FB00085FB222720F991E0922790FB85F98093D9
+:103FC000EF0181E30E940C1F882359F08091EF01DB
+:103FD00086FB222720F991E0922790FB86F98093B7
+:103FE000EF0181E10E940C1F882359F08091EF01BD
+:103FF00087FB222720F991E0922790FB87F9809395
+:10400000EF018091EF010E9482208091EF0187FBF8
+:10401000882780F980930D0187E20E940C1FC82F2A
+:104020008EE10E940C1F8111C2608FE10E940C1F63
+:104030008111C46080E20E940C1F8111C86081E27E
+:104040000E940C1F8111C06182E20E940C1F81112D
+:10405000C06283E20E940C1F8111C06484E20E944E
+:104060000C1F882311F0C06802C0CC2329F08C2FCC
+:104070000E9479206C2F03C00E947520682F70E089
+:1040800080E090E0CF910C943C1BCF9108956DEEB1
+:104090007EEF80E090E00E94B32660E082E090E056
+:1040A0000E94A12660E083E090E00E94A12660E0EB
+:1040B00084E090E00E94A12660E085E090E00C940E
+:1040C000A12680E090E00E949B2621E08D3E9E4F3D
+:1040D00009F020E0822F089582E090E00C9493266E
+:1040E000682F82E090E00C94A12683E090E00C948D
+:1040F0009326682F83E090E00C94A12684E090E062
+:104100000C949326682F84E090E00C94A126809173
+:10411000D70180FF0BC06091130185E0689FB0015B
+:10412000112475956795759567952BC081FF09C01A
+:104130006091130185E0689FB00111247595679522
+:1041400020C082FF07C06091130185E0689FB00125
+:10415000112417C09091D8019923D1F060911201D8
+:10416000961788F72091130185E0289F900111246C
+:10417000929FA001939F500D112470E0CA010E94EC
+:1041800065266038710540F46115710539F002C08B
+:1041900065E070E0862F08958FE7089581E0089527
+:1041A0008091D70180FF08C06091110170E0759582
+:1041B00067957595679521C081FF06C060911101D3
+:1041C00070E07595679519C082FF04C06091110178
+:1041D00070E010C09091D8019923C1F06091100156
+:1041E0009617A0F780911101899FC001112470E0FA
+:1041F0000E9465266038710528F46115710521F06B
+:10420000862F08958FE7089581E0089561E070E0BA
+:10421000F4CF803F21F40E948720819504C0813F24
+:1042200029F40E9487208093DB010895823F21F4C6
+:104230000E948720819504C0833F29F40E94872033
+:104240008093DA010895893F19F40E94D02005C0B7
+:104250008A3F31F40E94D02081958093DC0108953B
+:104260008B3F21F40E94D020819504C08C3F29F41B
+:104270000E94D0208093DD010895843F21F4809135
+:10428000D901816017C0853F21F48091D9018260F6
+:1042900011C0863F21F48091D90184600BC0873F13
+:1042A00021F48091D901886005C0883F31F4809164
+:1042B000D90180618093D90108958D3F21F48091C7
+:1042C000D70181600BC08E3F21F48091D7018260BD
+:1042D00005C08F3F29F48091D70184608093D70176
+:1042E0000895803F39F48091DB0187FF6CC0109204
+:1042F000DB0169C0813F29F48091DB011816BCF312
+:1043000062C09091DA01823F29F497FF5CC010925D
+:10431000DA0159C0833F19F41916CCF354C0893F10
+:1043200041F48091DC0118160CF04DC01092DC01B4
+:104330004AC08A3F29F48091DC0187FF44C0F6CF50
+:104340008B3F39F48091DD0187FF3DC01092DD0184
+:104350003AC08C3F29F48091DD011816BCF333C0BC
+:10436000843F21F48091D9018E7F17C0853F21F4CD
+:104370008091D9018D7F11C0863F21F48091D901B0
+:104380008B7F0BC0873F21F48091D901877F05C0C7
+:10439000883F31F48091D9018F7E8093D90113C079
+:1043A0008D3F21F48091D7018E7F0BC08E3F21F489
+:1043B0008091D7018D7F05C08F3F29F48091D7016F
+:1043C0008B7F8093D7018091DA0181110EC080919B
+:1043D000DB0181110AC08091DC01811106C080914E
+:1043E000DD01811102C01092D801089589ED91E09C
+:1043F0000E9407120E945D1E9093D6018093D50102
+:1044000008951F93CF93DF938091D5019091D601AA
+:104410000E94691EAC019091D801992321F020914E
+:10442000140130E006C0209115018AE0289F900118
+:1044300011244217530708F486C08091DA01C09115
+:10444000DB01D091DC011091DD01811107C0C111A8
+:1044500076C0D11174C0111172C075C09F3F19F0A0
+:104460009F5F9093D801181624F40E9487208093B0
+:10447000DA018091DA0187FF05C00E9487208195CB
+:104480008093DA011C1624F40E9487208093DB01BC
+:104490008091DB0187FF05C00E9487208195809372
+:1044A000DB016091DA01662339F1C091DB01CC2395
+:1044B00019F1772767FD7095872F972F0E94762532
+:1044C00023E333E343E35FE30E94DA250E944325BD
+:1044D0006093DA016C2F772767FD7095872F972FF0
+:1044E0000E94762523E333E343E35FE30E94DA256A
+:1044F0000E9443256093DB011D1624F40E94D02006
+:104500008093DC018091DC0187FF05C00E94D020F0
+:1045100081958093DC01111624F40E94D0208093B1
+:10452000DD018091DD0187FF05C00E94D0208195CB
+:104530008093DD01DF91CF911F910C94F6219F3F75
+:1045400009F08ECF96CFDF91CF911F910895E9EDBD
+:10455000F1E085E0DF011D928A95E9F71092D8011C
+:104560001092D7010895833081F128F4813059F0F9
+:104570008230D1F00895853009F449C0B8F1863011
+:1045800009F456C0089580911501262F30E0280FB8
+:10459000311D2F3F310524F4680F609315010895F4
+:1045A0008FEF80931501089580911401262F30E03C
+:1045B000280F311D2F3F310524F4680F609314013B
+:1045C00008958FEF80931401089580911301262F91
+:1045D00030E0280F311D2F3F310524F4680F609320
+:1045E000130108958FEF80931301089580911201B4
+:1045F000262F30E0280F311D2F3F310524F4680F9E
+:104600006093120108958FEF8093120108958091B5
+:104610001101262F30E0280F311D2F3F310524F4E2
+:10462000680F6093110108958FEF80931101089531
+:1046300080911001262F30E0280F311D2F3F3105CA
+:1046400024F4680F6093100108958FEF8093100198
+:104650000895833011F128F4813049F0823091F0CF
+:104660000895853081F120F18630C1F1089580915F
+:104670001501681720F4861B809315010895109288
+:104680001501089580911401681720F4861B80930A
+:104690001401089510921401089580911301681770
+:1046A00020F4861B8093130108951092130108953E
+:1046B00080911201681720F4861B809312010895DF
+:1046C00010921201089580911101681720F4861B41
+:1046D00080931101089510921101089580911001A5
+:1046E000681720F4861B8093100108951092100122
+:1046F00008950F931F938D3109F46BC008F03FC0EC
+:104700008E3009F47FC0C0F4873009F469C068F4C2
+:10471000863009F0B1C08091CF01817F8E7F809378
+:10472000CF0181E08093DF01A8C0883009F4A2C0E6
+:104730008B3009F49FC0A0C0863109F49BC078F487
+:10474000803109F472C0813109F096C00E9480174F
+:1047500090910D0181E0892780930D018BC08931F3
+:1047600009F488C08B3109F087C08091CF0181FBAB
+:10477000222720F991E0922790FB81F94CC08533E4
+:1047800009F470C048F4873209F46CC008F459C0C9
+:10479000893209F467C070C0833438F48A3308F072
+:1047A0004EC0883309F466C067C0833409F45AC028
+:1047B000883409F061C00E9480170FEF13ED20E3E9
+:1047C000015010402040E1F700C000000E94B81ED8
+:1047D00051C00E94FD240E94F0110E94E90A4AC0C3
+:1047E0009091CF01892F8095817080FB90F929F0FD
+:1047F000966098609093CF0140C0997F977F909387
+:10480000CF0138C08091CF0182FB222720F991E0AF
+:10481000922790FB82F98093CF01992359F18091DF
+:10482000CF0181608093CF0125C08091CF0183FBB0
+:10483000222720F991E0922790FB83F9ECCF89534E
+:1048400001C08D5141E050E060E070E08A019B01C1
+:1048500004C0000F111F221F331F8A95D2F7C90110
+:10486000B80104C061E070E080E090E00E943C1B71
+:104870000E94801781E001C080E01F910F91089590
+:1048800080E0089580E00895CF93C82F8091DF01E4
+:10489000813079F018F08230E9F187C0E0910E01A3
+:1048A000F0910F018081813169F0823209F07FC07F
+:1048B00009C0E0910E01F0910F018081813111F06A
+:1048C000823261F48C2F0E944024811104C08C2F0D
+:1048D0000E9479231DC081E090E01AC08C2F0E94B5
+:1048E0004224811114C0C43179F048F4CB3079F0FE
+:1048F000C03109F060C082E08093DF0108C0C93296
+:1049000019F0C83321F057C01092DF0154C081E084
+:10491000817053C0C93289F118F5C43171F1A8F41E
+:10492000C73009F046C08AE08093150194E1909366
+:10493000140193E0909313018093120188E0809317
+:10494000110188E28093100134C0CE51C63088F541
+:10495000EC2FF0E0E65DFE4F80818093DE0129C000
+:10496000CE34E9F020F4CB3421F56AE013C0C13530
+:1049700079F0C235F1F461E00DC08091DE01882349
+:1049800019F01092DE0115C081E08093DF0115C09F
+:1049900061E006C08091DE010E94B3220AC06AE095
+:1049A0008091DE010E94292304C01092DF0180E083
+:1049B00004C081E002C080E0ABCFCF910895E1E870
+:1049C000F0E08081886080838081816080838FB700
+:1049D000F89493E09093890090ED909388008FBFB6
+:1049E0000895EFE6F0E08081826080830895EFE62D
+:1049F000F0E080818D7F80830895EFE6F0E0908184
+:104A000082E08927808308951F920F920FB60F923C
+:104A100011242F933F934F935F936F937F938F93C3
+:104A20009F93AF93BF93EF93FF938091E001909199
+:104A3000E10101969093E1018093E001811103C0AF
+:104A400082E00E94E90AE091E101E695E695F0E056
+:104A5000E05EF74FE4918091E0018E1303C080E0A7
+:104A60000E94E90AFF91EF91BF91AF919F918F91C1
+:104A70007F916F915F914F913F912F910F900FBE5A
+:104A80000F901F90189504D06894B1118DC00895AF
+:104A900070D088F09F5790F0B92F9927B751A0F0A8
+:104AA000D1F0660F771F881F991F1AF0BA95C9F7C2
+:104AB00012C0B13081F077D0B1E0089574C0672F93
+:104AC000782F8827B85F39F0B93FCCF38695779572
+:104AD0006795B395D9F73EF490958095709561955B
+:104AE0007F4F8F4F9F4F0895E89409C097FB3EF486
+:104AF00090958095709561957F4F8F4F9F4F99232B
+:104B0000A9F0F92F96E9BB279395F69587957795A8
+:104B10006795B795F111F8CFFAF4BB0F11F460FF68
+:104B20001BC06F5F7F4F8F4F9F4F16C0882311F0C0
+:104B300096E911C0772321F09EE8872F762F05C0D4
+:104B4000662371F096E8862F70E060E02AF09A956F
+:104B5000660F771F881FDAF7880F9695879597F964
+:104B6000089557FD9058440F551F59F05F3F71F05D
+:104B70004795880F97FB991F61F09F3F79F08795C4
+:104B80000895121613061406551FF2CF4695F1DF4D
+:104B900008C0161617061806991FF1CF86957105DD
+:104BA000610508940895E894BB2766277727CB0111
+:104BB00097F908950BD078C069D028F06ED018F01E
+:104BC000952309F05AC05FC01124EECFCADFA0F3CD
+:104BD000959FD1F3950F50E0551F629FF001729F92
+:104BE000BB27F00DB11D639FAA27F00DB11DAA1FB1
+:104BF000649F6627B00DA11D661F829F2227B00DFE
+:104C0000A11D621F739FB00DA11D621F839FA00D88
+:104C1000611D221F749F3327A00D611D231F849FD8
+:104C2000600D211D822F762F6A2F11249F5750402F
+:104C30008AF0E1F088234AF0EE0FFF1FBB1F661FCA
+:104C4000771F881F91505040A9F79E3F510570F083
+:104C500014C0AACF5F3FECF3983EDCF386957795BE
+:104C60006795B795F795E7959F5FC1F7FE2B880F7E
+:104C7000911D9695879597F9089597F99F6780E814
+:104C800070E060E008959FEF80EC089500240A949E
+:104C90001616170618060906089500240A94121617
+:104CA0001306140605060895092E0394000C11F44A
+:104CB000882352F0BB0F40F4BF2B11F460FF04C0F7
+:104CC0006F5F7F4F8F4F9F4F089597FB072E16F40E
+:104CD000009407D077FD09D00E947F2607FC05D0FD
+:104CE0003EF4909581959F4F0895709561957F4F03
+:104CF0000895EE0FFF1F0590F491E02D0994AA1B73
+:104D0000BB1B51E107C0AA1FBB1FA617B70710F0B6
+:104D1000A61BB70B881F991F5A95A9F780959095E8
+:104D2000BC01CD010895F999FECF92BD81BDF89ADD
+:104D3000992780B50895A8E1B0E042E050E00C94D6
+:104D4000BB26262FF999FECF92BD81BDF89A019717
+:104D500000B4021639F01FBA20BD0FB6F894FA9AC3
+:104D6000F99A0FBE08950196272F0E94A2260C944F
+:104D7000A126DC01CB01FC01F999FECF06C0F2BDF2
+:104D8000E1BDF89A319600B40D9241505040B8F709
+:064D90000895F894FFCF26
+:104D96002002EB0A790B560B220BEE0A0101BC012D
+:104DA60028080A03140A3F4D3639E10794075E07BF
+:104DB6002507B806D106EA0603070102030405061D
+:044DC60007080900D1
+:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png
index 29f1099d0..031d874a7 100644
--- a/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png
+++ b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/readme.md b/keyboard/ergodox_ez/keymaps/osx_de_experimental/readme.md
new file mode 100644
index 000000000..e6a101841
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/osx_de_experimental/readme.md
@@ -0,0 +1,22 @@
+
+# Ergodox und Ergodox-EZ experimentelles Layout
+
+dieses layout ist experimentell und wird im Lufe der Zeit viele Änderungen und Verbesserungen durchlaufen. Falls diese sich als vorteilhaft erweisen, werden sie evtl. auch in das `osx_de` layout übernommen.
+
+
+
+# Erstellt Mit Dem ErgodoxLayoutGenerator
+
+Der ErgodoxLayoutGenerator (ELG) ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
+Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
+---------------------------------------------------------------------------------------------------------------------
+
+# Ergodox and Ergodox-EZ experimental layout
+
+This is an experimental layout which will undergo heavy changes over time. If changes prove to be good, they might also move into the `osx_de` layout.
+
+Created Using the ErgodoxLayoutGenerator
+
+The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
+
+The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). \ No newline at end of file
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/config.h b/keyboard/ergodox_ez/keymaps/townk_osx/config.h
new file mode 100644
index 000000000..78aa3ee8b
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/config.h
@@ -0,0 +1,92 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1307
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ErgoDox EZ
+#define PRODUCT ErgoDox EZ
+#define DESCRIPTION t.m.k. keyboard firmware for Ergodox
+
+/* key matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 6
+
+#define MOUSEKEY_DELAY 100
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 3
+#define MOUSEKEY_TIME_TO_MAX 10
+
+#define TAPPING_TOGGLE 1
+
+#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define ROWS (int []){ D0, D5, B5, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 2
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+#define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+//#define DEBUG_MATRIX_SCAN_RATE
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#endif
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c b/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c
new file mode 100644
index 000000000..b63698ec6
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c
@@ -0,0 +1,285 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "led.h"
+#include "keymap_common.h"
+#include "timer.h"
+
+/*
+
+# Why this Layout
+
+This layout was based on Kinesis layout and other ErgoDox user layouts
+available. It's target to be used on a MacOS but I'm pretty sure it can be
+addapted to Windows and/or Linux easily.
+
+## Function Key
+
+The `fn` key work almost like it would in any other keyboard with the exception
+it has a semi-sticky behavior. What does that mean?
+
+Well, if you press the `fn` and release it, the keyboard will be put on the
+_function layout_ and the next key stroke will be processed as if the `fn` key
+was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and
+press any other key, when you release them, the keyboard leyout is back to
+_normal_.
+
+While pressing the `fn` with the left hand and strikeing the other keys on the
+right hand is farly easy, the same cannot being said for the other keys on the
+left side. So, instead of trying to do contorcionism with my left hand, I
+decided to do a semi-sticky version of `fn`. This way, I can press the `fn`
+key with my pinky, release it and press the `1` key to issue an `F1` to the
+operating system.
+
+## Key-Pad Key
+
+The `key pad` key is a layout switch key. If pressed, it will put the keyboard
+on the _key pad layout_ and stay there until key is pressed again.
+
+This is used to make the keyboard behave mostly like a **num pad keyboard**.
+
+## Notes
+- Regardless in which layout you are, keys from other layouts are not
+ accessible. This means that if you are on the _key pad layout_, the left hand
+ will be pretty much unusable.
+ Of course that like anything else, there are exceptions to this rule.
+ Modifiers should remain accessible throughout the layers.
+- The _shift key_ is, like the _function key_, also configured to have a sticky
+ behavior.
+- All sticky keys have a timeout of 3 seconds.
+
+*/
+#define BASE 0
+#define KEYPAD 1
+#define FN 2
+
+#define MACRO_TMUX_ESC 10
+#define MACRO_TMUX_PASTE 11
+#define MACRO_OSX_COPY 12
+#define MACRO_OSX_PASTE 13
+
+#define M_TESC M(MACRO_TMUX_ESC)
+#define M_TPASTE M(MACRO_TMUX_PASTE)
+#define M_OSXCPY M(MACRO_OSX_COPY)
+#define M_OSXPST M(MACRO_OSX_PASTE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base Layer
+ *
+ * ,-----------------------------------------------------. ,-----------------------------------------------------.
+ * | `~ | 1 | 2 | 3 | 4 | 5 | ESC | | Pwr | 6 | 7 | 8 | 9 | 0 | - _ |
+ * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
+ * | Tab | Q | W | E | R | T | F16 | | F17 | Y | U | I | O | P | = + |
+ * |-----------+------+------+------+------+------| Meh | | Meh |------+------+------+------+------+-----------|
+ * | \ (Ctrl) | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " (Ctrl)|
+ * |-----------+------+------+------+------+------| F18 | | F19 |------+------+------+------+------+-----------|
+ * | LShift | Z | X | C | V | B | Hyper| | Hyper| N | M | , | . | / | RShift |
+ * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
+ * | FN | KPAD |LCtrl | LAlt | LGui | | RGui | RAlt | RCtrl| KPAD | FN |
+ * `-----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | M(0) | M(1) | | M(2) | M(3) |
+ * ,------|------|------| |------+------+------.
+ * | | | Home | | PgUp | | |
+ * |Backsp| Del |------| |------| Enter| Space|
+ * | | | End | | PgDn | | |
+ * `--------------------' `--------------------'
+ *
+ * M(0) = Ctrk+A Esc
+ * (this is used to issue the Esc key to the Tmux application)
+ * M(1) = Ctrk+A P
+ * (this is used to issue the Paste key to the Tmux application)
+ * M(2) = Cmd+C
+ * M(3) = Cmd+V
+ */
+[BASE]=KEYMAP(//left half
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_F16),
+ CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_FN2, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_F18),
+ KC_FN1, TG(KEYPAD), KC_LCTRL, KC_LALT, KC_LGUI,
+ M_TESC, M_TPASTE,
+ KC_HOME,
+ KC_BSPC, KC_DELT, KC_END,
+ //right half
+ KC_POWER, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ MEH_T(KC_F17), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT),
+ ALL_T(KC_F19), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN2,
+ KC_RGUI, KC_RALT, CTL_T(KC_LBRC), KC_FN3, KC_FN1,
+ M_OSXCPY, M_OSXPST,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC),
+
+/* Keymap 1: KeyPad Layer
+ *
+ * ,-----------------------------------------------------. ,-----------------------------------------------------.
+ * | | | LClk | RClk | MClk | | | | BTab | Clear| / | * | ^ | ( | |
+ * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
+ * | M.Accel 2 | |ScrlUp| U |ScrlDn| | | | Tab | 7 | 8 | 9 | + | ) | |
+ * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
+ * | M.Accel 1 | | L | D | R | |------| |------| 4 | 5 | 6 | - | | |
+ * |-----------+------+------+------+------+------| | |Return|------+------+------+------+------+-----------|
+ * | M.Accel 0 | |ScrlL | |ScrlR | | | | | 1 | 2 | 3 | = | | |
+ * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
+ * | | XXXX | | | | | 0 | . | , | XXXX | |
+ * `-----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | XXXX | |
+ * | | |------| |------| XXXX | |
+ * | | | | | | XXXX | |
+ * `--------------------' `--------------------'
+ */
+[KEYPAD]=KEYMAP(//left half
+ KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO,
+ KC_MS_ACCEL2, KC_NO, KC_MS_WH_UP, KC_MS_U, KC_MS_WH_DOWN, KC_NO, KC_NO,
+ KC_MS_ACCEL1, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
+ KC_MS_ACCEL0, KC_NO, KC_MS_WH_LEFT, KC_NO, KC_MS_WH_RIGHT, KC_NO, KC_NO,
+ KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_NO,
+ //right half
+ LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH, KC_KP_ASTERISK, KC_CIRCUMFLEX, KC_LPRN, KC_NO,
+ KC_TAB, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_RPRN, KC_NO,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, KC_NO, KC_NO,
+ KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_EQUAL, KC_NO, KC_NO,
+ KC_KP_0, KC_KP_DOT, KC_KP_COMMA, KC_TRNS, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_TRNS, KC_NO),
+
+/* Keymap 2: Functions Layer
+ *
+ * ,-----------------------------------------------------. ,-----------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Vol. Up |
+ * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
+ * | | Stop | Rw | Rec | FF | | XXXX | | XXXX | | | | | | Vol. Down |
+ * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------|
+ * | CapsLock | Eject| Prev | Play | Next | |------| |------| Left | Down | Up | Right| | Mute |
+ * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------|
+ * | L Shift | | | | | | XXXX | | XXXX | | | | | | R Shift |
+ * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
+ * | XXXXX | | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | | XXXXX |
+ * `-----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ *
+ * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer.
+ */
+[FN]=KEYMAP(//left half
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_NO, KC_MEDIA_STOP, KC_MEDIA_REWIND, KC_MEDIA_SELECT, KC_MEDIA_FAST_FORWARD, KC_NO, KC_TRNS,
+ KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_NO,
+ //right half
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_MUTE,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_NO)};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_ONESHOT(FN),
+ [2] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+ [3] = ACTION_LAYER_TAP_KEY(KEYPAD, KC_RBRC),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ // MACRODOWN only works in this function
+ switch(id) {
+ case MACRO_TMUX_ESC:
+ if (record->event.pressed) {
+ return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END);
+ }
+ return MACRO(U(ESC), END);
+ case MACRO_TMUX_PASTE:
+ if (record->event.pressed) {
+ return MACRO(D(LCTRL), T(A), U(LCTRL), D(P), END);
+ }
+ return MACRO(U(P), END);
+ case MACRO_OSX_COPY:
+ if (record->event.pressed) {
+ return MACRO(D(LGUI), D(C), END);
+ }
+ return MACRO(U(C), U(LGUI), END);
+ case MACRO_OSX_PASTE:
+ if (record->event.pressed) {
+ return MACRO(D(LGUI), D(V), END);
+ }
+ return MACRO(U(V), U(LGUI), END);
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+uint8_t current_layer = BASE;
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_led_all_off();
+ ergodox_led_all_set(LED_BRIGHTNESS_LO);
+
+ switch (layer) {
+ case BASE:
+ current_layer = BASE;
+ break;
+ case KEYPAD:
+ current_layer = KEYPAD;
+ break;
+ default:
+ // none
+ break;
+ }
+
+ // layer leds
+ if (current_layer == KEYPAD) {
+ ergodox_right_led_3_on();
+ }
+
+ // capslock
+ if (host_keyboard_leds() & (3<<USB_LED_CAPS_LOCK)) {
+ ergodox_right_led_1_on();
+ }
+
+ // Temporary leds
+
+ // The function layer takes over other layers and we need to reflect that on the leds.
+ // If the current layer is the BASE, we simply turn on the FN led, but if the current
+ // layer is the KEYPAD, than we must turn it off before turning on the FN led.
+ if (layer == FN && !has_oneshot_layer_timed_out()) {
+ ergodox_right_led_3_off();
+ ergodox_right_led_2_on();
+ }
+
+ // if the shifted is pressed I show the case led in a brighter color. This is nice to
+ // differenciate the shift from the capslock.
+ // Notice that I make sure that we're not using the shift on a chord shortcut (pressing
+ // shift togather with other modifiers).
+ if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && // is shift pressed and there is no other
+ !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) || // modifier being pressed as well
+ (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) { // or the one shot shift didn't timed out
+ ergodox_right_led_1_set(LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_on();
+ }
+};
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/makefile.mk b/keyboard/ergodox_ez/keymaps/townk_osx/makefile.mk
new file mode 100644
index 000000000..e757557bd
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/makefile.mk
@@ -0,0 +1,4 @@
+# I don't want my keyboard blinking lights when is suppose to be asleep.
+SLEEP_LED_ENABLE = no
+
+CONFIG_H = keymaps/$(KEYMAP)/config.h
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/readme.md b/keyboard/ergodox_ez/keymaps/townk_osx/readme.md
new file mode 100644
index 000000000..c2853ca17
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/readme.md
@@ -0,0 +1,77 @@
+# Townk's Keymap
+
+Trying to take care of an enjury on my arm I borrow an ergonomic keyboard from
+a frient ([Kinesis Advantage](http://www.kinesis-ergo.com/shop/advantage-pro-for-pc-mac/)).
+
+I really enjoyed my time with it but there were some anoyancies:
+
+* The curvature on the keys bothered me since I'm a Vim user and using the
+ motion keys on my editor was awkard.
+* I had to spend too much time remapping the keyboard to make some symbol keys
+ more accessible to me.
+* The fact that my hands had to stay close to each other was a bit stressfull
+ to my sholders.
+
+After a long research I find out that Ergodox EZ would be perfect for my needs
+and purchase one. Before the keyboard even got in my hands I started to think
+on the layout I would use on it and soon enough I planed couple adjustments
+from the Kinesis I was using so far.
+
+## The layout
+
+Here are the layout mapping in images so you can have a glimpse on it:
+
+![Base Layout](townk_osx_base.png)
+![fn Layout](townk_osx_fn.png)
+![Keypad & Mouse Layout](townk_osx_keypad.png)
+
+Notice that, differently from the default behavior, my layer keys are not transparent
+by default, which means that if you press any non-labeled white key, nothing will be
+handled to the OS.
+
+### One shot keys
+
+It all started with the access to the function keys (F1, F2, F3...), since
+those keys are located on a different layer I needed a way to press them with
+minimal effort without disrupting my flow.
+
+For me, togglihg a layer to press a button and than toggle it back is a waste
+of time (although I admit it's a single tap from what I have), so I decided to
+do it as a one shot key. I could press it and the next pressed key would be
+handled by the target layer which just after it delivers the key to the OS it
+would get back to the previous layer.
+
+After setting up my layout to do just that I realized that occasionally I
+would stop myseld on the middle of the process and the one shot layer would be
+still triggered until I press any other key. So to prevent me from tapping
+keys I don't want I added a timeout of 3 seconds for the one shot actions.
+
+Ultimately I tested the shift key as a one shot one and really like it, so
+here you have it, all the one shot keys on my layout.
+
+## Glossary
+
+If you're not familiar with the Mac symbols used on some keys, here is a
+reference to them:
+
+| Symbol | Description |
+| :----: | ------------------- |
+| ⌘ | Command |
+| ⇪ | Caps Lock |
+| ⇧ | Shift |
+| ⌥ | Option (alt) |
+| ⎋ | Esc |
+| ⇥ | Tab forward |
+| ⇤ | Tab backward |
+| ⌃ | Control |
+| ␣ | Space |
+| ⌫ | Backspace |
+| ⌦ | Delete |
+| ⏎ | Enter |
+| ⌤ | Return |
+| ⌽ | Power on/off button |
+| ↖ | Home |
+| ↘ | End |
+| ⇞ | Page up |
+| ⇟ | Page down |
+| ⌧ | Clear |
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex
new file mode 100644
index 000000000..868d86e82
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex
@@ -0,0 +1,1166 @@
+:100000000C9474020C94B8020C94B8020C94B802CC
+:100010000C94B8020C94B8020C94B8020C94B80278
+:100020000C94B8020C94B8020C94ED0C0C94BF0D17
+:100030000C94141C0C94B8020C94B8020C94B802E2
+:100040000C94B8020C94B8020C94B8020C94B80248
+:100050000C94B8020C947C1C0C94B8020C94B8025A
+:100060000C94B8020C94B8020C94B8020C94B80228
+:100070000C94B8020C94B8020C94B8020C94B80218
+:100080000C94B8020C94B8020C94B8020C94B80208
+:100090000C94B8020C94B8020C94B8020C94B802F8
+:1000A0000C94B8020C94B8020C94B8022C0E4E0EAC
+:1000B0003C0F4E0E3C0F930EB60E3C0F0B0F1E0F57
+:1000C00029122912551255129D12BB1237143714DA
+:1000D000C61237147B137B132814371437143114CA
+:1000E0008813881388138813881388138813881338
+:1000F0008813881388138813881388138813881328
+:100100009913A713AE13B513BF13021902E300012D
+:10011000E3011900020602E30001E30106000213F5
+:100120000001E00104020402E001130002290001C1
+:10013000E00104020402E00129000000F4A2002210
+:1001400030A135002B003171C200C10000001E003B
+:10015000140004001D0001544D001F001A00160079
+:100160001B00E0004C002000080007000600E20031
+:100170002A002100150009001900E3004A002200AE
+:1001800017000A00050000000A3029006B77000004
+:100190006D7F00000B3066006C7700006E7F000002
+:1001A0000C3023001C000B00110000000D30240057
+:1001B00018000D001000E7004B0025000C000E0099
+:1001C0003600E6002C00260012000F0037002F71C9
+:1001D00028002700130033003800C3004E002D0014
+:1001E0002E003471C200C10000000000FF00FE00BC
+:1001F000FD00000000000000000000000000010001
+:100200000000F400F900F200FB0000000000F5001F
+:10021000F000F100000000000000F600FA00F3001A
+:10022000FC000000000000000000000000000000D2
+:1002300000000000000000000000000000002B0291
+:100240002B0000005800000000009C005F005C00D4
+:10025000590000000000540060005D005A00620078
+:100260000000550061005E005B0063000000230297
+:100270005700560067008500010026022702000093
+:10028000000001000000000000000000000000006D
+:100290000000000000003900E100010000003A0009
+:1002A000AD00B0000000000000003B00BC00AC004E
+:1002B0000000010000003C00AF00AE0000000100A3
+:1002C00000003D00BB00AB000000010000003E004C
+:1002D000000000000000000000003F0001000000DE
+:1002E00001000000000040000100000001000000CB
+:1002F000000041000000500000000000000042002B
+:100300000000510000000100000043000000520006
+:10031000000001000000440000004F000000010048
+:100320000000450000000000000000000000A900DF
+:10033000AA00A800E50001000000160345007200B5
+:1003400067006F0044006F007800200045005A00ED
+:10035000000016034500720067006F0044006F0044
+:100360007800200045005A00000004030904090237
+:100370006D00040100A0FA0904000001030101005E
+:10038000092111010001223F000705810308000A2D
+:1003900009040100010301020009211101000122E9
+:1003A0004D000705820308000A090402000103004A
+:1003B000000009211101000122360007058303080E
+:1003C000000A0904030001030000000921110100D3
+:1003D00001223900070584031000011201100100F9
+:1003E000000008EDFE0713010001020001050109EC
+:1003F00006A101050719E029E715002501950875F3
+:1004000001810205081901290595057501910295DB
+:10041000017503910105071900297715002501953C
+:100420007875018102C005010980A10185021601CC
+:100430000026B7001A01002AB70075109501810047
+:10044000C0050C0901A1018503160100269C021AB2
+:1004500001002A9C02751095018100C00501090266
+:10046000A1010901A10005091901290515002501AE
+:10047000950575018102950175038101050109301A
+:1004800009311581257F9502750881060938158186
+:10049000257F950175088106050C0A38021581250E
+:1004A0007F950175088106C0C005010906A10105F7
+:1004B0000719E029E71500250195087501810295C6
+:1004C0000175088101050819012905950575019136
+:1004D000029501750391010507190029FF150025F3
+:1004E000FF950675088100C011241FBECFEFDAE02A
+:1004F000DEBFCDBF04B603FE24C08091F30190910E
+:10050000F401A091F501B091F6018730904BA7401E
+:10051000B04BB9F41092F3011092F4011092F5016E
+:100520001092F60114BE84B7877F84BF88E10FB6AE
+:10053000F89480936000109260000FBEE0E0FFE34B
+:10054000099511E0A0E0B1E0E0E9F8E402C005900F
+:100550000D92A433B107D9F711E0A4E3B1E001C0D3
+:100560001D92A33FB107E1F70E94330A0C94462481
+:100570000C940000FC016B3079F018F46A3031F013
+:100580001DC06C3079F06D3099F018C082818111F6
+:1005900018C08CE291E008958281811115C08EE12E
+:1005A00091E008958281811112C084E191E0089563
+:1005B000828181110FC08AE091E0089580E090E08F
+:1005C00008958FE291E0089581E291E0089589E134
+:1005D00091E008958FE091E008950895CF936091A0
+:1005E000B2017091B3018091B4019091B5010E9464
+:1005F0007F1BC82F56985E9825982D9826982E9880
+:1006000027982F988FE090E090938900809388003E
+:1006100090938B0080938A0090938D0080938C0040
+:10062000CC2329F0C13029F4C093340102C01092C8
+:10063000340180913401813011F4279A2F9A0E945D
+:10064000750F867011F0259A2D9AC23041F40E94E0
+:10065000081A811104C027982F98269A2E9AE091A3
+:100660000E01F0910F018081982F927259F08D7DCB
+:1006700049F48FEF90E09093890080938800259A49
+:100680002D9A08C00E94351B827221F00E94DB194E
+:10069000882379F3CF9108950C94EE0256985E98D2
+:1006A00025982D9826982E9827982F988FEF90E0D0
+:1006B000909389008093880090938B0080938A00A8
+:1006C00090938D0080938C00259A2D9A2FEF80E7D0
+:1006D00092E0215080409040E1F700C00000269A4F
+:1006E0002E9A2FEF80E792E0215080409040E1F772
+:1006F00000C00000279A2F9A2FEF80E792E0215048
+:1007000080409040E1F700C0000025982D982FEF21
+:1007100080E792E0215080409040E1F700C0000067
+:1007200026982E982FEF80E792E02150804090404D
+:10073000E1F700C0000027982F9856985E982598FA
+:100740002D9826982E9827982F98089589EA8093B7
+:10075000800089E08093810024982C983F988AB18A
+:100760008F748AB96E98479A8BB1806B8BB9769AE1
+:100770000E944E030C94ED0280E280930001809170
+:10078000350181110EC00E940B0481E08093350178
+:100790002FEF83ED90E3215080409040E1F700C0BF
+:1007A000000080E40E9411048093000181112EC09A
+:1007B0000E943B0480930001811128C00E943B04E9
+:1007C00080930001811122C08FE30E943B0480933B
+:1007D000000181111BC00E94330480E40E941104B7
+:1007E00080930001811112C08CE00E943B04809331
+:1007F000000181110BC00E943B0480930001811114
+:1008000005C08FE30E943B04809300010E943304E3
+:100810008091000108951092B9008AE08093B80099
+:10082000089594EA9093BC009091BC0097FFFCCF90
+:100830009091B900987F983021F0903111F081E0CB
+:1008400008958093BB0084E88093BC008091BC0035
+:1008500087FFFCCF8091B900887F883111F0803408
+:1008600071F780E0089584E98093BC008091BC001A
+:1008700084FDFCCF08958093BB0084E88093BC0086
+:100880008091BC0087FFFCCF9091B900987F81E0F8
+:10089000983209F480E0089584E88093BC00809148
+:1008A000BC0087FFFCCF8091BB00089580910001C0
+:1008B000811115C080E40E94110480930001811110
+:1008C0000CC082E10E943B0480930001811105C0AD
+:1008D0008FEF0E943B04809300010E94330484B197
+:1008E000807F84B985B1807F85B98AB1837F8AB9D9
+:1008F0008BB1837F8BB93E98469808950E94BC03C4
+:10090000809300010E94560480B38C7080BB81B339
+:10091000836F81BBA7E3B1E0E5E4F1E08EE08E0FE9
+:1009200011921D928E13FCCF0C94A603BF92CF920E
+:10093000DF92EF92FF920F931F93CF93DF938091FB
+:100940000001882379F0809136018F5F8093360112
+:10095000811108C00E94BC0380930001811102C074
+:100960000E944E0307E311E0C0E0D0E0DD24D39401
+:1009700082E0C82EEE24E394F12CC730D10500F5B7
+:1009800080910001811164C080E40E941104809371
+:100990000001811112C082E10E943B04809300019A
+:1009A00081110BC0C7010C2E01C0880F0A94EAF711
+:1009B00080950E943B04809300010E94330448C04C
+:1009C000CA30A1F028F4C83059F0C93061F005C030
+:1009D000CC3089F070F0CD3089F0209A289810C082
+:1009E000219A29980DC0229A2A980AC0239A2B98F6
+:1009F00007C0529A01C0539A5B9802C03E9A46982B
+:100A000090EA9A95F1F79FB1799902C082E001C00E
+:100A100080E091709D25982B7C9902C084E001C0F4
+:100A200080E0892B7D9902C038E001C030E0832B43
+:100A30007E9902C020E101C020E0822B9FB19095F9
+:100A4000991F9927991F9295990F907E892B0FC016
+:100A500080910001811149C080E40E9411048093BB
+:100A60000001882379F1B12C0E9433048B2DF80109
+:100A70009081981719F08083C09201010E9456045A
+:100A800021960F5F1F4FCE30D10509F076CF8091B0
+:100A90000101882361F1815080930101882339F09D
+:100AA0008FE99FE00197F1F700C0000020C0A5E4A6
+:100AB000B1E0E7E3F1E0CF01825F91919D938E1366
+:100AC000FCCF15C083E10E943B048093000181119B
+:100AD000CACF81E40E941104809300018111C3CF29
+:100AE0000E944C04B82EB094BFCF80E0C0CF0E94CB
+:100AF0004C0381E0DF91CF911F910F91FF90EF9018
+:100B0000DF90CF90BF900895E82FF0E0EB5BFE4FB1
+:100B1000808108950895089596E0799FF001112449
+:100B200094E5899FE00DF11D1124E60FF11DEE0FF4
+:100B3000FF1FEE5BFE4F859194910895880F991FDA
+:100B4000FC01E654F040859194910895880F991F17
+:100B5000FC01E65CFE4F8591949108950F931F93DD
+:100B6000CF93DF93EC018115904350F5C11580E2DE
+:100B7000D80708F0B3C0CB3BD10590F4C83AD105F3
+:100B800008F05AC0C53AD10508F04BC0C430D105B1
+:100B900008F0CCC1219709F0C6C101E010E006C2FF
+:100BA000CF3FD10511F008F0C1C1C03FD10508F019
+:100BB00092C0CE01805E9109089708F4B7C1B3C115
+:100BC000C11591E5D907A8F4C23020E5D20708F095
+:100BD0009EC0C11580E5D80709F485C008F091C012
+:100BE000C11520E4D20708F09EC1DD278E01106CEC
+:100BF000DDC1C11580E8D80758F4C11590E7D907C1
+:100C000008F08DC1C11520E6D20708F422C18BC1BE
+:100C1000C11580E9D80708F086C1DF708E01106A1F
+:100C2000C5C1C53AD10509F483C1C63AD10509F059
+:100C300082C102E810E4BAC1C83AD10509F47EC104
+:100C4000C93AD10509F47DC1CA3AD10509F47CC17C
+:100C5000CB3AD10509F47BC1CC3AD10509F47AC16C
+:100C6000CD3AD10509F479C1C03BD10509F478C169
+:100C7000CE3AD10509F477C1CF3AD10509F476C14E
+:100C8000C13BD10509F475C1C23BD10509F474C15A
+:100C9000C33BD10509F473C1C43BD10509F472C14A
+:100CA000C53BD10509F471C1C63BD10509F470C13A
+:100CB000C73BD10509F46FC1C83BD10509F46EC12A
+:100CC000C93BD10509F46DC1CA3BD10509F46CC11A
+:100CD00000E014E46BC18E01106568C1CE019F7005
+:100CE0000E94A60564C10E948B149FEF24E38CE050
+:100CF000915020408040E1F700C000000E94A11CFC
+:100D000055C18091D40181608093D4014FC10E946C
+:100D10004A1E811102C00E94301E0E94671E90E090
+:100D20009093F3018093F201C23090E5D90721F44A
+:100D30008091F201816086C0C43020E5D20721F4A1
+:100D40008091F20182607EC0C63080E5D80721F430
+:100D50008091F201846076C0C83090E5D90719F41B
+:100D60008091F20127C0CA3020E5D20721F480919A
+:100D7000F201806167C0CC3080E5D80721F4809112
+:100D8000F20180625FC0CE3090E5D90721F48091F6
+:100D9000F201806457C0C03120E5D20721F4809170
+:100DA000F20180684FC0C23180E5D80729F48091F4
+:100DB000F2018460886046C0C33090E5D90721F411
+:100DC0008091F2018E7F3EC0C53020E5D20721F42C
+:100DD0008091F2018D7F36C0C73080E5D80721F4BD
+:100DE0008091F2018B7F2EC0C93090E5D90719F4AC
+:100DF0008091F20126C0CB3020E5D20721F480910A
+:100E0000F2018F7E1FC0CD3080E5D80721F480919C
+:100E1000F2018F7D17C0CF3090E5D90721F4809182
+:100E2000F2018F7B0FC0C13120E5D20721F4809100
+:100E3000F2018F7707C0C331D04531F48091F201C0
+:100E40008B7F877F8093F2018091F2010E946B1E5D
+:100E5000ADC08D2F99278F70992781309105D9F4D6
+:100E60009E012370332702C0880F991F2A95E2F74D
+:100E70009C688E0144E0000F111F4A95E1F700279E
+:100E80001370802B912B53E0CC0FDD1F5A95E1F7A7
+:100E9000C076DD272FC08230910531F4DC2FCC27BE
+:100EA0008E01016F106A82C08330910569F4CE0112
+:100EB0008370992701E010E002C0000F111F8A958E
+:100EC000E2F7C8019C680FC084309105B9F4CE01E7
+:100ED0008370992701E010E002C0000F111F8A956E
+:100EE000E2F7C8019A6823E0CC0FDD1F2A95E1F7ED
+:100EF000C07ED7708C010C2B1D2B58C085309105FE
+:100F000031F4DC2FCC278E01046F106A4FC0069796
+:100F100009F04CC0CF71DD27DC2FCC2701C0DF707A
+:100F20008E01106243C000E010E040C08E013EC060
+:100F300001E810E43BC003E810E438C002EE14E41A
+:100F400035C009EE14E432C00AEE14E42FC005EBFC
+:100F500014E42CC006EB14E429C007EB14E426C00B
+:100F60000CEC14E423C00DEC14E420C003E815E4F9
+:100F70001DC00AE815E41AC002E915E417C004E927
+:100F800015E414C001E216E411C003E216E40EC039
+:100F900004E216E40BC005E216E408C006E216E41B
+:100FA00005C007E216E402C00AE216E4C801DF91B8
+:100FB000CF911F910F91089596E0799FF001112430
+:100FC00094E5899FE00DF11D1124E60FF11DEE0F50
+:100FD000FF1FEE5BFE4F85919491803E9105E0F4FA
+:100FE000803C910558F58133910509F46FC048F4B0
+:100FF0008932910509F463C08A32910509F46DC004
+:1010000072C089339105E9F082389105D1F08533BA
+:10101000910509F44DC067C0833E910581F138F414
+:10102000803E9105B9F0823E9105D9F05CC0863EC4
+:10103000910561F1873E9105A1F155C00E949E0581
+:1010400008952091F20120FD02C021FF4CC080EEE6
+:1010500090E049C08091F20180FFF9CF89E390E0F0
+:1010600042C08091F20182FF0EC08091F20184FFA4
+:1010700003C080E090E037C083EE90E034C0809100
+:10108000F20182FFF2CF82EE90E02DC08091F2015A
+:1010900083FF0BC08091F20184FDEBCF87EE90E0DF
+:1010A00022C08091F20183FFF5CF86EE90E01BC055
+:1010B0008091F20185FF07C089E290E014C0809121
+:1010C000F20185FFF9CF85E390E00DC08091F20138
+:1010D00086FF07C08AE290E006C08091F20186FF99
+:1010E000F9CF81E390E00E94AE05089508950C9435
+:1010F0007608809163010895CF93DF9300D01F920B
+:10110000CDB7DEB79C018091E901843019F593E0F9
+:1011100099833B832A839093E9008FEF9091E800B5
+:10112000815095FD06C095ED9A95F1F7000081116B
+:10113000F5CF8091E80085FF0DC040E050E063E00E
+:1011400070E0CE0101960E94DD0A8091E8008E7762
+:101150008093E8000F900F900F90DF91CF9108954A
+:10116000CF93DF9300D01F92CDB7DEB72091E90176
+:10117000243021F522E029839B838A8383E08093B6
+:10118000E9008FEF9091E800815095FD06C095ED44
+:101190009A95F1F700008111F5CF8091E80085FF65
+:1011A0000DC040E050E063E070E0CE0101960E9487
+:1011B000DD0A8091E8008E778093E8000F900F9011
+:1011C0000F90DF91CF9108952091E9012430F1F43F
+:1011D00022E02093E9002FEF3091E800215035FD07
+:1011E00006C035ED3A95F1F700002111F5CF2091B9
+:1011F000E80025FF0BC040E050E065E070E00E9491
+:10120000DD0A8091E8008E778093E8000895CF93FF
+:10121000DF93EC019091E901943009F046C0809190
+:101220000C018823D9F080910D018823B9F09093A7
+:10123000E9008FEF9091E800815095FD06C095E19F
+:101240009A95F1F700008111F5CF8091E80085FFB4
+:101250002CC040E050E060E170E017C081E0809376
+:10126000E9008FEF9091E800815095FD06C095ED63
+:101270009A95F1F700008111F5CF8091E80085FF84
+:1012800014C040E050E068E070E0CE010E94DD0A4A
+:101290008091E8008E778093E80080E1FE01A3E56D
+:1012A000B1E001900D928A95E1F7DF91CF91089519
+:1012B0008091E801811109C00E94720C0E94CF0C3C
+:1012C0008091E20084608093E20008951092E8012A
+:1012D0000895089508950C940E1C42E061EC81E09D
+:1012E0000E94EC0B42E061EC82E00E94EC0B42E0D9
+:1012F00061EC83E00E94EC0B42E161EC84E00C9431
+:10130000EC0B8091EB01833009F455C030F481304F
+:1013100071F0823009F48EC008958A3009F47AC0E1
+:101320008B3009F460C0893009F09CC020C08091E6
+:10133000EA01813A09F096C08091E800877F8093A6
+:10134000E8008091EE019091EF01892B21F460E19A
+:1013500083E591E003C060E080E090E070E00E94EF
+:10136000280B8091E8008B778093E80008958091A6
+:10137000EA01813209F076C08091EE019091EF018F
+:10138000009719F0039709F06DC08091E800877FFE
+:101390008093E8008091E80082FD05C08091E9011A
+:1013A0008111F8CF5FC08091F1008093630180913B
+:1013B000E8008B7753C08091EA01813A09F052C06E
+:1013C0008091EE019091EF01892B09F04BC0809143
+:1013D000E800877F8093E8008091E80080FFFCCFE1
+:1013E00080910C0136C08091EA018132D9F580915B
+:1013F000EE019091EF01892BA9F58091E800877F9C
+:101400008093E8000E94210C8091EC0180930C01F4
+:101410000C948B148091EA01813221F58091E800CF
+:10142000877F8093E8000E94210C8091ED018093DA
+:10143000640108958091EA01813AA1F48091E80065
+:10144000877F8093E8008091E80080FFFCCF809147
+:1014500064018093F1008091E8008E778093E8002A
+:101460000C94210C089584B7877F84BF88E10FB660
+:10147000F89480936000109260000FBE90E080E8C6
+:101480000FB6F89480936100909361000FBE0E94A4
+:10149000C40F0E94720C0E94CF0C8091E200846005
+:1014A0008093E20078940E94550F0E94C60F82E05C
+:1014B00091E00E94700F8091E901853069F40E94EB
+:1014C000CF1B8091E7018823B1F30E94FA1B882388
+:1014D00091F30E94C70AEFCF0E94CC0FECCF292FC7
+:1014E000332723303105C9F064F42130310581F010
+:1014F0002230310509F043C08DE690E02EE633E05E
+:1015000042C021323105F1F02232310541F137C0BC
+:1015100082E190E02BED33E036C0992781309105D0
+:1015200041F08230910541F0892B49F5EAE6F3E07C
+:1015300005C0E2E5F3E002C0EAE3F3E0849190E065
+:101540009F0121C06430D8F4E62FF0E0EE0FFF1FBA
+:10155000EE5DFE4F2081318189E090E014C064305F
+:1015600070F470E0FB01EE0FFF1FE65EFE4F20817E
+:101570003181FB01EA5EFE4F808190E004C080E093
+:1015800090E020E030E0FA0131832083089580E18B
+:1015900089BD82E189BD09B400FEFDCF8091D800EC
+:1015A0008F7D8093D8008091E00082608093E0007E
+:1015B0008091E00081FDFCCF0895CF92DF92EF9201
+:1015C000FF920F931F93CF93DF93EC018B016A017E
+:1015D0000E94400C811133C0C114D10439F0F601CE
+:1015E00080819181081B190BC80FD91FE12CF12CA8
+:1015F0000115110519F18091E80085FD16C0809153
+:10160000E8008E778093E800C114D10449F0F60118
+:1016100080819181E80EF91EF182E08285E00FC0A1
+:101620000E94400C882321F30AC089918093F10025
+:1016300001501109FFEFEF1AFF0ADACF80E0DF91C6
+:10164000CF911F910F91FF90EF90DF90CF90089571
+:101650002091F0013091F1012617370748F061150C
+:10166000710539F42091E8002E772093E80001C03D
+:10167000B90140E061157105A9F12091E90122232A
+:1016800009F443C0253009F442C02091E80023FD4D
+:1016900040C02091E80022FD32C02091E80020FFE8
+:1016A000E9CF4091F3002091F20030E0342BFC01AF
+:1016B000CF016115710559F02830310540F4819151
+:1016C0008093F100615071092F5F3F4FF1CF41E0EE
+:1016D0002830310509F040E02091E8002E77209372
+:1016E000E800C8CF4111C9CF0AC08091E901882321
+:1016F00061F0853061F08091E80083FD0AC080913F
+:10170000E80082FFF2CF80E0089582E0089583E050
+:10171000089581E008952091F0013091F10126179C
+:10172000370748F06115710539F42091E8002E77EC
+:101730002093E80001C0B901FC0120E061157105AA
+:1017400091F18091E901882309F440C0853009F4C2
+:101750003FC08091E80083FD3DC08091E80082FD9C
+:101760002FC08091E80080FFE9CF2091F3008091A5
+:10177000F20090E0922B6115710559F088309105C7
+:1017800040F424912093F100319661507109019643
+:10179000F2CF21E0089709F020E08091E8008E77F1
+:1017A0008093E800CBCF2111CCCF0AC08091E90112
+:1017B000882361F0853061F08091E80083FD0AC0E4
+:1017C0008091E80082FFF2CF80E0089582E00895E2
+:1017D00083E0089581E00895982F973058F590930D
+:1017E000E900981739F07091EC002091ED005091CC
+:1017F000F00003C0242F762F50E021FF19C0309154
+:10180000EB003E7F3093EB003091ED003D7F309355
+:10181000ED003091EB0031603093EB007093EC0001
+:101820002093ED005093F0002091EE0027FF07C0B9
+:101830009F5FD3CF8F708093E90081E0089580E0AF
+:1018400008958091EA0187FF11C08091E80082FD30
+:1018500005C08091E9018111F8CF11C08091E800A5
+:101860008B770BC08091E901882349F08091E800D3
+:1018700080FFF8CF8091E8008E778093E80008958C
+:101880002091E4003091E50095E64091EC00842F32
+:10189000817040FF22C08091E80080FD1CC08091D3
+:1018A000E901882391F0853091F08091EB0085FD6E
+:1018B00010C04091E4005091E5004217530729F30E
+:1018C0009A01915011F784E0089582E0089583E031
+:1018D000089581E0089580E008954091E80042FF76
+:1018E000DECF08950E94E00C0E94E80CE0EEF0E0EC
+:1018F000808181608083E8EDF0E080818F77808354
+:1019000019BCA7EDB0E08C918E7F8C9380818F7E87
+:1019100080831092E80108950F931F93CF93DF9374
+:101920000E94E00C0E94E80CC8EDD0E088818F771F
+:10193000888388818068888388818F7D888319BCAB
+:101940001092E9011092E5011092E7011092E60170
+:1019500000EE10E0F80180818B7F808388818160B8
+:10196000888342E060E080E00E94EC0BE1EEF0E072
+:1019700080818E7F8083E2EEF0E0808181608083D1
+:10198000808188608083F80180818E7F8083888158
+:1019900080618883DF91CF911F910F910895E8EDC9
+:1019A000F0E080818F7E8083E7EDF0E080818160D0
+:1019B000808384E082BF81E08093E8010C948C0CEA
+:1019C000E8EDF0E080818E7F80831092E200089540
+:1019D0001092DA001092E10008951F920F920FB654
+:1019E0000F9211242F933F934F935F936F937F93A5
+:1019F0008F939F93AF93BF93EF93FF938091E100F9
+:101A000082FF0BC08091E20082FF07C08091E1005D
+:101A10008B7F8093E1000E94540F8091DA0080FF59
+:101A20001FC08091D80080FF1BC08091DA008E7F9C
+:101A30008093DA008091D90080FF0DC080E189BDDC
+:101A400082E189BD09B400FEFDCF81E08093E90108
+:101A50000E94580905C019BC1092E9010E9466094C
+:101A60008091E10080FF19C08091E20080FF15C0E5
+:101A70008091E2008E7F8093E2008091E20080619D
+:101A80008093E2008091D80080628093D80019BCD6
+:101A900085E08093E9010E946A098091E10084FF5A
+:101AA00030C08091E20084FF2CC080E189BD82E1DA
+:101AB00089BD09B400FEFDCF8091D8008F7D809351
+:101AC000D8008091E1008F7E8093E1008091E20058
+:101AD0008F7E8093E2008091E20081608093E2003B
+:101AE0008091E501882311F084E007C08091E30034
+:101AF00087FD02C081E001C083E08093E9010E947C
+:101B00006B098091E10083FF29C08091E20083FF8F
+:101B100025C08091E100877F8093E10082E080937F
+:101B2000E9011092E5018091E1008E7F8093E10050
+:101B30008091E2008E7F8093E2008091E2008061DC
+:101B40008093E20042E060E080E00E94EC0B809134
+:101B5000F00088608093F0000E946909FF91EF9186
+:101B6000BF91AF919F918F917F916F915F914F91B5
+:101B70003F912F910F900FBE0F901F9018951F92BD
+:101B80000F920FB60F9211242F933F934F935F93B1
+:101B90006F937F938F939F93AF93BF93CF93DF9375
+:101BA000EF93FF93C091E900CF708091EC00D82FA4
+:101BB000D17080FDD0E81092E9008091F000877F1D
+:101BC0008093F00078940E94030E1092E9008091B7
+:101BD000F00088608093F000CD2BCF70C093E900B7
+:101BE000FF91EF91DF91CF91BF91AF919F918F9135
+:101BF0007F916F915F914F913F912F910F900FBE09
+:101C00000F901F9018951F93CF93DF93CDB7DEB73A
+:101C1000AA970FB6F894DEBF0FBECDBFEAEEF1E093
+:101C200088E08E0F9091F10091938E13FBCF0E946C
+:101C300081098091E80083FF1FC18091EA019091A2
+:101C4000EB01492F50E04A30510508F015C1FA0167
+:101C5000EA5AFF4F0C94F623803881F0823809F05D
+:101C60000BC18091EE018F708093E9008091EB00B1
+:101C700085FB882780F91092E90006C08091E60173
+:101C80009091E701911182609091E800977F909385
+:101C9000E8008093F1001092F100C8C0282F2D7F3A
+:101CA00009F0EAC0882319F0823061F0E5C0809124
+:101CB000EC01813009F0E0C0933009F080E08093BE
+:101CC000E7012BC08091EC01811127C08091EE01CA
+:101CD0008F7009F4D1C08093E9002091EB0020FFC0
+:101CE0001CC0933021F48091EB00806214C090916D
+:101CF000EB0090619093EB0021E030E0A90102C07D
+:101D0000440F551F8A95E2F74093EA001092EA00CB
+:101D10008091EB0088608093EB001092E900809145
+:101D2000E800877F86C08111A7C01091EC011F7762
+:101D30008091E3008078812B8093E3008091E8001C
+:101D4000877F8093E8000E94210C8091E80080FF4B
+:101D5000FCCF8091E30080688093E300111102C002
+:101D600082E001C083E08093E90186C08058823020
+:101D700008F082C08091EC019091ED018C3D53E020
+:101D8000950779F583E08A838AE289834FB7F894CF
+:101D9000DE01139620E03EE051E2E32FF0E05093A5
+:101DA0005700E49120FF03C0E295EF703F5FEF70B2
+:101DB0008E2F90E0EA3010F0C79601C0C0968D9348
+:101DC0009D932F5F243149F74FBF8091E800877FB3
+:101DD0008093E8006AE270E0CE0101960E94280B31
+:101DE00014C0AE014F5F5F4F6091EE010E946F0A19
+:101DF000BC01892B09F440C09091E800977F909333
+:101E0000E80089819A810E948B0B8091E8008B7792
+:101E10008093E80031C0803879F58091E800877FB1
+:101E20008093E8008091E5018093F1008091E800C3
+:101E30008E778093E8000E94210C1EC081111CC087
+:101E40009091EC019230C0F48091E800877F8093FC
+:101E5000E8009093E5010E94210C8091E501811139
+:101E600006C08091E30087FD02C081E001C084E0EC
+:101E70008093E9010E946D098091E80083FF0AC008
+:101E80008091E800877F8093E8008091EB0080627A
+:101E90008093EB00AA960FB6F894DEBF0FBECDBFBD
+:101EA000DF91CF911F9108950895CF938091E9011B
+:101EB0008823A1F0C091E900CF709091EC00892FA8
+:101EC000817090FD80E8C82B1092E9008091E800B5
+:101ED00083FD0E94030ECF70C093E900CF91089557
+:101EE00090936A01809369010895E0916901F091EE
+:101EF0006A01309721F00190F081E02D099480E093
+:101F00000895E0916901F0916A01309721F0028013
+:101F1000F381E02D09940895E0916901F0916A013F
+:101F2000309721F00480F581E02D099408952091E7
+:101F30006701309168018217930771F090936801EF
+:101F400080936701E0916901F0916A01309721F077
+:101F50000680F781E02D0994089520916501309164
+:101F600066018217930771F0909366018093650173
+:101F7000E0916901F0916A01309721F00084F185C8
+:101F8000E02D0994089508950C94C30F0E943D1C00
+:101F90000E947E040C94031DCF92DF92EF92FF9279
+:101FA0000F931F93CF93DF93CDB7DEB72B970FB669
+:101FB000F894DEBF0FBECDBF0E9496048CE6C82EFB
+:101FC00081E0D82E00E010E0E02E802F0E948405F2
+:101FD000F60141916F01F42EF826B1F40F5F1F4F07
+:101FE0000E30110589F78FEF89838A831B820E9447
+:101FF000461C8160782F9D838C8349815A816B8137
+:102000008D810E946F1040C09091D40191FF04C057
+:102010008B870E948A058B8520E030E04F2D50E0B1
+:10202000922FBA01022E02C0759567950A94E2F7C5
+:1020300060FF24C02E83EF8221E030E0690102C0FE
+:10204000CC0CDD1C9A95E2F790E08C219D21892B28
+:1020500009F420E028870E94461C8160782F9A8727
+:1020600089874E815F8168858A850E946F10F8019B
+:10207000E459FE4F8081C826C08206C02F5F3F4FC3
+:102080002630310569F6AACF0E94EA1F10916B0134
+:102090000E94750F1817A1F00E94750F80936B01B5
+:1020A0002B960FB6F894DEBF0FBECDBFDF91CF9158
+:1020B0001F910F91FF90EF90DF90CF900C947708D5
+:1020C0002B960FB6F894DEBF0FBECDBFDF91CF9138
+:1020D0001F910F91FF90EF90DF90CF900895CF93D5
+:1020E000DF93CDB7DEB72B970FB6F894DEBF0FBEE8
+:1020F000CDBF4F83588769877A878B87DE0111961A
+:1021000086E0FD0111928A95E9F785E0FE01379698
+:1021100001900D928A95E1F749815A816B817C810A
+:102120008D819E810E9429172B960FB6F894DEBFF1
+:102130000FBECDBFDF91CF9108950895CF9388232F
+:1021400009F4C2C0C82F823859F40E94750F81FD6E
+:10215000BBC089E30E946C1A0E94491B89E30CC032
+:10216000833879F40E94750F80FDAEC083E50E942C
+:102170006C1A0E94491B83E50E94AE1ACF910C9401
+:10218000491B843859F40E94750F82FD9DC087E475
+:102190000E946C1A0E94491B87E4EECF8CEF8C0FD3
+:1021A000813A48F48C2F0E94252281118DC08C2FFA
+:1021B0000E946C1AE3CF80E28C0F883048F4C7701D
+:1021C00081E001C0880FCA95EAF70E94F51AD6CFC0
+:1021D0008BE58C0F833078F4C53A29F0C63A31F09C
+:1021E00083E890E005C081E890E002C082E890E0DA
+:1021F000CF910C94970F88E58C0F833108F064C061
+:10220000C83A39F1C93A41F1CA3A49F1CB3A51F1E8
+:10221000CC3A59F1CD3A61F1C03B69F1CE3A71F156
+:10222000CF3A79F1C13B81F1C23B89F1C33B91F1D6
+:10223000C43B99F1C53BA1F1C63BA9F1C73BB1F144
+:10224000C83BB9F1C93BC1F1CA3BC9F180E090E09C
+:1022500038C082EE90E035C089EE90E032C08AEE60
+:1022600090E02FC085EB90E02CC086EB90E029C079
+:1022700087EB90E026C08CEC90E023C08DEC90E0E2
+:1022800020C083E891E01DC08AE891E01AC082E98D
+:1022900091E017C084E991E014C081E292E011C09E
+:1022A00083E292E00EC084E292E00BC085E292E00D
+:1022B00008C086E292E005C087E292E002C08AE2AE
+:1022C00092E0CF910C94AD0FCF910895882309F43B
+:1022D0004BC0823859F40E94750F81FF45C089E3D5
+:1022E0000E946C1A0E94491B89E30CC0833871F468
+:1022F0000E94750F80FF38C083E50E946C1A0E940F
+:10230000491B83E50E94AE1A0C94491B843859F48A
+:102310000E94750F82FF28C087E40E946C1A0E94F9
+:10232000491B87E4EFCF9CEF980F913A58F390E266
+:10233000980F983050F4877091E001C0990F8A95FA
+:10234000EAF7892F0E94FB1ADFCF9BE5980F9330A5
+:1023500020F480E090E00C94970F885A833120F4A9
+:1023600080E090E00C94AD0F0895882321F00E9446
+:10237000F51A0C94491B0895882321F00E94FB1A3A
+:102380000C94491B08952F923F924F925F927F9237
+:102390008F929F92AF92BF92CF92DF92EF92FF9275
+:1023A0000F931F93CF93DF9300D000D01F92CDB730
+:1023B000DEB725E0FC01DE01119601900D922A9511
+:1023C000E1F7FC0100811181F280E580E2943FE0B9
+:1023D000E32223813481232B09F472C21F3F19F4B5
+:1023E0000F3F09F46DC26C010E94081A882319F08E
+:1023F00082E00E944A1AC6010E949D1009831A8336
+:1024000069817A818F2D0E94CE198C010E948319D7
+:102410000E944A18F1100E94121B0E94651A88231C
+:1024200079F0FF2069F080E2800F883048F082E088
+:102430000E944A1A0E94651A91E0782E792601C0FE
+:10244000712CE12FE295EF70F0E0E05AFF4F0C9411
+:10245000F623812F807F1F70882311F01295107F43
+:10246000FF2089F0112309F4E8C180E2800F883051
+:1024700020F4812F0E94F51A03C0812F0E94051BB2
+:102480000E94491BDAC1802F0E946611112309F4B2
+:10249000EEC1005E812F083018F40E94FB1A02C0C2
+:1024A0000E940B1B0E94491BE2C1812F807F1F707D
+:1024B000803211F01295107F002319F0013049F19C
+:1024C00032C0FF2091F0EE2091F1F1E0EF1204C054
+:1024D000812F0E94251BCBC122E0E21228C00E945E
+:1024E0002E1B812F0E94D51922C0EE2079F031E0F9
+:1024F000E31208C00E94F21A812309F4B8C10E94B5
+:10250000D81904C042E0E41609F4B1C10E942E1BA0
+:1025100012C0FF2029F051E05E1508F4A8C107C0E1
+:10252000E110A5C108C0FF2021F0E11086C1812F74
+:10253000F7C0E11089C1812FF9C0812F869586955A
+:10254000837090E0009719F0019759F090C1FF2037
+:1025500019F0C801937002C080E090E00E94970FCC
+:1025600086C1FF2019F0C801937002C080E090E09E
+:102570000E94AD0F7CC1802FFF2019F00E94F21E37
+:1025800002C00E945A1F0E94DF1F71C1812F8370F9
+:1025900009F055C0F1106BC1802F82958695877028
+:1025A000880F880F902F9F70492F50E060E070E0F7
+:1025B0001A012B01082E04C0220C331C441C551C8C
+:1025C0000A94D2F704FF15C02FE0822E912CA12C83
+:1025D000B12CA501940104C0220F331F441F551FC5
+:1025E0008A95D2F7CA01B90160957095809590954A
+:1025F00003C060E070E0CB01169516951370412F73
+:1026000050E04230510569F04330510589F06229AC
+:102610007329842995294130510571F00E94711860
+:1026200026C162297329842995290E948D181FC10A
+:102630000E947118C201B1010E94551818C1FF20F3
+:1026400019F0812F817001C08695882309F40FC18C
+:10265000802F829586958770880F880F902F9F70A6
+:10266000492F50E060E070E01A012B01082E04C0F1
+:10267000220C331C441C551C0A94D2F704FF15C0CD
+:102680009FE0892E912CA12CB12CA501940104C0AE
+:10269000220F331F441F551F8A95D2F7CA01B90173
+:1026A000609570958095909503C060E070E0CB01D7
+:1026B000169516951370412F50E04230510569F080
+:1026C0004330510589F062297329842995294130C5
+:1026D000510571F00E944B19CAC0622973298429DF
+:1026E00095290E946719C3C00E944B19C201B1010C
+:1026F0000E942F19BCC0802F90E0FC01E05EF10920
+:10270000E531F10508F094C0E059FF4F0C94F62331
+:102710000F70812F8F71FF2031F00E94C818802F19
+:102720000E94B511A4C00E94E918802F0E94BC111C
+:102730009EC0FF2039F0E1109AC0812F8F710E9456
+:102740000E1995C031E03E1508F491C0F6CFFF2078
+:1027500039F0812F8F710E94C81889C0FF20C9F3FA
+:10276000812F8F710E94E91882C0FF2029F0812FEC
+:102770008F710E94B3187BC00E94A91878C0FF20F7
+:10278000C1F00E94D2190E94FB1A0E94041A8430E0
+:1027900029F40E94431A812F8F717AC041E04E15AF
+:1027A00008F48EC01F71812F0E94C81863E0812F2A
+:1027B0000EC00E94D2190E94F51A51E05E15F8F47D
+:1027C0000E94431A0E94D81964E0812F8F710F90E4
+:1027D0000F900F900F900F90DF91CF911F910F915D
+:1027E000FF90EF90DF90CF90BF90AF909F908F9031
+:1027F0007F905F904F903F902F900C94331A81E020
+:102800000F900F900F900F900F90DF91CF911F912D
+:102810000F91FF90EF90DF90CF90BF90AF909F907F
+:102820008F907F905F904F903F902F900C944A1A1A
+:10283000FF2039F0EE2009F48CCF802F0E949E10EB
+:1028400016C0EE2009F48CCF802F0E9466110FC0B5
+:10285000412F4F70602FC6010E94BA020E94CD170F
+:1028600006C0412F4F70602FC6010E948B05772054
+:1028700039F10E94041A80FD23C0F60112820E94E1
+:10288000FE190E94C818C6010E94C3110E94FE19B9
+:102890000F900F900F900F900F90DF91CF911F919D
+:1028A0000F91FF90EF90DF90CF90BF90AF909F90EF
+:1028B0008F907F905F904F903F902F900C94E918ED
+:1028C0000F900F900F900F900F90DF91CF911F916D
+:1028D0000F91FF90EF90DF90CF90BF90AF909F90BF
+:1028E0008F907F905F904F903F902F9008950E941F
+:1028F000121B0E94221B0E94E41A0E94491B0E9484
+:1029000090200E94DF1F80E090E00E94970F80E0FF
+:1029100090E00C94AD0F0E94021B0C9477140E945F
+:10292000C319292F22952F7030E02C3031054CF43B
+:102930002A3031056CF42250310922303105A8F4D7
+:1029400007C02C30310569F02F30310551F00DC032
+:10295000803F69F018F4803E40F409C0843F29F4B8
+:1029600006C093FB882780F9089580E0089581E0F0
+:102970000895CF93DF9300D000D01F92CDB7DEB77C
+:102980000F900F900F900F900F90DF91CF910895BF
+:10299000CF93DF9300D000D000D0CDB7DEB726961E
+:1029A0000FB6F894DEBF0FBECDBFDF91CF91089573
+:1029B0001F93CF93DF93C0917A0116E080917B0142
+:1029C000C81799F0D0E01C9FF0011D9FF00D112455
+:1029D000E458FE4F408151816281738184819581E9
+:1029E0000E94C8142196C770E9CFDF91CF911F9143
+:1029F00008954091AC015091AD016091AE0170918C
+:102A0000AF018091B0019091B1010C94C8148091F4
+:102A1000B10182958F7009F054C08091AE01882376
+:102A200009F44FC080917A01A0917B016091AC01C3
+:102A30007091AD014091AF015091B001B6E08A179D
+:102A400009F43FC090E041155105C1F17F3F11F4F9
+:102A50006F3FA1F1B89FF001B99FF00D1124E45828
+:102A6000FE4F218172132AC02081621327C0228168
+:102A7000211124C0238134812417350710F42150FB
+:102A80003109241B350B283C3105C0F42091B101DC
+:102A90002F7020612093B10126E0289FF001299F2B
+:102AA000F00D1124EF57FE4F80818F70806180837D
+:102AB0008CEA91E00E94C3110C94D814019687709F
+:102AC000BECF0895CF92DF92EF92FF920F931F93A4
+:102AD000CF93DF93CDB7DEB762970FB6F894DEBF22
+:102AE0000FBECDBF8C0185E0F801DE011D9601907F
+:102AF0000D928A95E1F7D8014C9111965C9111974E
+:102B000012966C9112971396CD90DC901497309199
+:102B1000AC017091AD018091AF019091B00100972F
+:102B200009F46BC17F3F19F43F3F09F466C1E0909F
+:102B3000AE01EE2009F4C0C02091B101C816D9063B
+:102B400028F0F601E81BF90BCF0104C080959095A1
+:102B50008C0D9D1DFF24F394883C910578F0F12C99
+:102B6000207F09F0C6C07C2DD98AC88A89890E9435
+:102B7000B9148CEA91E00E94C311B1C0822F807F0A
+:102B800009F046C0751314C0341312C0611110C08F
+:102B90002F7020612093B1010E94F9148CEA91E01A
+:102BA0000E94C3118091B101D80115968C932EC05B
+:102BB000CD2819F15F3F11F44F3FF9F0F62E611166
+:102BC0001CC080917A0120917B0136E0821709F4C4
+:102BD0005AC090E0389FF001399FF00D1124E4585D
+:102BE000FE4F7181571306C07081471303C0728175
+:102BF000711103C001968770E9CFF62E662309F4A0
+:102C000018C18091B10181608093B101F12C11C193
+:102C1000751308C0341306C0611104C08091B1015E
+:102C2000D801C3C04D875E878D859E856A8B0E94C3
+:102C30008F146A898823E1F16623D1F12091B101D3
+:102C4000822F82958F7090E0029774F08091AC0192
+:102C50009091AD0198878F831986DB86CA862C8771
+:102C6000CE0107960E94C31186E0F801ACEAB1E0FC
+:102C700001900D928A95E1F70E9407150E94F914C0
+:102C8000FF24F394D6C04D875E878D859E850E9474
+:102C9000C319292F22952F7030E0223031050CF016
+:102CA000BCC09F7009F0B6C0805E883008F4C1C017
+:102CB000C8010E94C311E4CFC816D90608F453C056
+:102CC000F601E81BF90BCF01883C910508F450C0D0
+:102CD000F12C7C2DD98AC88A89890E94B914ECEA22
+:102CE000F1E086E0DF011D928A95E9F70E94F91470
+:102CF000A0C0751314C0341312C0611110C08091AC
+:102D0000B101F8018583C8010E94C31186E0ECEA95
+:102D1000F1E0DF011D928A95E9F7FE2C8AC04D870C
+:102D20005E878D859E856A8B0E948F146A898823B1
+:102D300009F4BECF662309F4BBCF2091B101822FE5
+:102D400082958F7090E002970CF48ECF8091AC0149
+:102D50009091AD019A8389831B82DD82CC822E8380
+:102D6000CE0101967FCF809590958C0D9D1DACCFA7
+:102D7000F62E662309F49CCF75132EC034132CC095
+:102D80002091B10120FD1FC0822F82958F70D9F054
+:102D9000D80115962C9315978F3049F08F5F982F97
+:102DA0009295907F822F8F70892B15968C93C801F6
+:102DB0000E94C31186E0F801ACEAB1E001900D92E7
+:102DC0008A95E1F793CF86E0F801ACEAB1E0019093
+:102DD0000D928A95E1F72DC04D875E878D859E8582
+:102DE0000E948F14811140CF8091B1018160809346
+:102DF000B101C8010E94C3111CC0662309F458CF59
+:102E00004D875E878D859E850E948F14882309F4E7
+:102E10004FCF2ACF811148CF0CC0243031050CF0A0
+:102E200047CF9F7009F440CFF8019581907F09F05A
+:102E30003BCF8F2D62960FB6F894DEBF0FBECDBF8D
+:102E4000DF91CF911F910F91FF90EF90DF90CF9086
+:102E500008951F93CF93DF93CDB7DEB72C970FB6AE
+:102E6000F894DEBF0FBECDBF4F83588769877A873E
+:102E70008B879C87CE0107960E946215882369F094
+:102E80008F8198852A853B85232BF1F19F3F09F09F
+:102E900063C08F3F09F060C037C086E0FE013796FF
+:102EA000DE01119601900D928A95E1F76F81788588
+:102EB000EA85FB85309741F17F3F11F46F3F21F1A7
+:102EC00020917B0130E0C9010196877099274091DC
+:102ED0007A0150E08417950709F447C069837A8323
+:102EE000FD83EC8396E0929FD001939FB00D112457
+:102EF000A458BE4FFE01319601900D929A95E1F7CC
+:102F000080937B010E94D81416E080917A01909101
+:102F10007B018917C1F1189FC001112484589E4F6D
+:102F20000E946215882379F1E0917A011E9FF001D9
+:102F30001124E458FE4F4081518162817381848164
+:102F400095810E94C81480917A0190E00196877063
+:102F5000992780937A01D9CF4F81588569857A85E1
+:102F60008B859C850E94C814CFCF0E948B14109231
+:102F70007B0110927A01ECEAF1E086E0DF011D921C
+:102F80008A95E9F7C1CF2C960FB6F894DEBF0FBE35
+:102F9000CDBFDF91CF911F910895EF92FF920F93D4
+:102FA0001F93CF93DF938C01892B09F46CC0F12C14
+:102FB000EE24E394E8012196F8018491843740F4EB
+:102FC000843008F051C0813081F0823019F15BC04B
+:102FD000853709F444C0A8F19CE7980F903708F0B2
+:102FE00052C08F770E94661141C00E5F1F4FFE01D5
+:102FF000C49180E28C0F883048F4C7708E2D01C0D8
+:10300000880FCA95EAF70E94151B14C08C2F0E94E6
+:103010009E102DC00E5F1F4FFE01C49180E28C0FE9
+:10302000883058F4C7708E2D01C0880FCA95EAF712
+:103030000E941B1B0E94491B1AC08C2F0E94661104
+:1030400016C00E5F1F4FFE01C491CC2381F08FE9A3
+:103050009FE00197F1F700C00000C150F6CF0E5F6E
+:103060001F4FFE01F49003C00E949E108E018F2D11
+:10307000882309F49FCFEFE9FFE03197F1F700C013
+:1030800000008150F5CFDF91CF911F910F91FF90FC
+:10309000EF90089508956093B6017093B7018093FF
+:1030A000B8019093B9010C9477140F931F9300917A
+:1030B000B6011091B7012091B8013091B901DC013E
+:1030C000CB01802B912BA22BB32B8093B601909335
+:1030D000B701A093B801B093B9011F910F910C945F
+:1030E00077140F931F930091B6011091B7012091AF
+:1030F000B8013091B901DC01CB0180239123A223D7
+:10310000B3238093B6019093B701A093B801B09315
+:10311000B9011F910F910C9477140F931F93009195
+:10312000B6011091B7012091B8013091B901DC01CD
+:10313000CB0180279127A227B3278093B6019093D4
+:10314000B701A093B801B093B9011F910F910C94EE
+:1031500077141092B2011092B3011092B401109240
+:10316000B5010C94771441E050E060E070E004C0D9
+:10317000440F551F661F771F8A95D2F74093B201FF
+:103180005093B3016093B4017093B5010C9477141C
+:1031900041E050E060E070E004C0440F551F661F3E
+:1031A000771F8A95D2F78091B2019091B301A091D7
+:1031B000B401B091B501482B592B6A2B7B2B40935E
+:1031C000B2015093B3016093B4017093B5010C94B4
+:1031D000771441E050E060E070E004C0440F551FF8
+:1031E000661F771F8A95D2F7409550956095709528
+:1031F0008091B2019091B301A091B401B091B50159
+:10320000482359236A237B234093B2015093B3018F
+:103210006093B4017093B5010C94771441E050E0D1
+:1032200060E070E004C0440F551F661F771F8A9549
+:10323000D2F78091B2019091B301A091B401B09105
+:10324000B501482759276A277B274093B20150933D
+:10325000B3016093B4017093B5010C9477140F938C
+:103260001F930091B2011091B3012091B4013091EC
+:10327000B501DC01CB01802B912BA22BB32B8093CA
+:10328000B2019093B301A093B401B093B5011F9123
+:103290000F910C9477140F931F930091B20110912A
+:1032A000B3012091B4013091B501DC01CB01802341
+:1032B0009123A223B3238093B2019093B301A093EF
+:1032C000B401B093B5011F910F910C9477140F9333
+:1032D0001F930091B2011091B3012091B40130917C
+:1032E000B501DC01CB0180279127A227B32780936A
+:1032F000B2019093B301A093B401B093B5011F91B3
+:103300000F910C9477140895CF92DF92EF92FF9271
+:103310000F931F93CF93DF938C01C090B601D09091
+:10332000B701E090B801F090B9018091B20190919D
+:10333000B301A091B401B091B501C82AD92AEA2AF3
+:10334000FB2ACFE1D0E0D701C6010C2E04C0B69510
+:10335000A795979587950A94D2F780FF06C0B80184
+:103360008C2F0E94DC07019721F4219760F780E001
+:1033700001C08C2FDF91CF911F910F91FF90EF90A3
+:10338000DF90CF900895CF93DF93EC010E948419D2
+:10339000BE010E94DC07DF91CF910895CB010E940E
+:1033A000C31908958091BF0108958093BF010895C6
+:1033B0001092BF0108950E94461C2091BD013091DA
+:1033C000BE018217930750F00E94461C2091BD0158
+:1033D0003091BE01821B930B9C010AC00E94461CC7
+:1033E0002091BD013091BE0120953095280F391FE5
+:1033F00081E0283B3B4008F480E008958091BC01C7
+:1034000085958595859508958091BC01877008956F
+:103410000E94461C2091BA013091BB01821793078C
+:10342000A8F00E94461C2091BA013091BB01821B7A
+:10343000930B883B9B4010F480E013C08091BC014B
+:1034400082FB882780F991E089270BC00E94461CE7
+:103450002091BA013091BB0120953095820F931FC6
+:10346000E8CF8170089598E0899F90011124262B60
+:103470002093BC010E94C8180E94461C9093BB0177
+:103480008093BA0108951092BC011092BB01109272
+:10349000BA0108952091BC01809582238093BC01DC
+:1034A000982F977089F430E0482F552747FD5095A5
+:1034B0002417350749F08595859585950E94E9186B
+:1034C0001092BB011092BA0108959091BC019770BF
+:1034D00081E009F480E0089590910C01992321F096
+:1034E00090910D01911109C020910E0130910F01B1
+:1034F000F90132969FEF40E01FC0982F9695969560
+:1035000096959F3050F5E0910E01F0910F01E90F73
+:10351000F11D877021E030E0A90102C0440F551F62
+:103520008A95E2F7CA019181892B818308959F3F93
+:1035300039F04F5F4E3041F051915813F8CF0DC024
+:103540005111F7CF942FF5CF9F3F39F0F901E90FD3
+:10355000F11D97FDFA9582830895089590910C01CD
+:10356000992321F090910D01911109C020910E0134
+:1035700030910F01F9013296205F3F4F1FC0982F05
+:103580009695969596959F30F0F4E0910E01F09106
+:103590000F01E90FF11D877021E030E0A90102C0A1
+:1035A000440F551F8A95E2F7CA01809591818923BE
+:1035B000818308953196E217F30729F090819813DB
+:1035C000F9CF1082F7CF089581E090E0E0910E01ED
+:1035D000F0910F01E80FF91F1082019680319105DB
+:1035E000A9F708958091D30108959091D301892B73
+:1035F0008093D301089580959091D301892380937E
+:10360000D30108951092D30108959091D201892B8E
+:103610008093D201089580959091D201892380935F
+:10362000D20108951092D20108959091D101892B71
+:103630008093D101089580959091D1018923809341
+:10364000D10108951092D10108958093C0010E9484
+:10365000461C9093BE018093BD0108951092C00155
+:103660001092BE011092BD0108958091C00108958D
+:1036700080910E0190910F01FC0131969C01205F19
+:103680003F4F80E0919191118F5FE217F307D1F7DF
+:103690000895E0910E01F0910F018091D301808394
+:1036A000E0910E01F0910F0190818091D201892B60
+:1036B0008083E0910E01F0910F0190818091D10102
+:1036C000892B80838091C001882399F00E94DB19A7
+:1036D00081110E942E1BE0910E01F0910F0190814B
+:1036E0008091C001892B80830E94381B81110E9428
+:1036F0002E1B80910E0190910F010C94810FCF929F
+:10370000DF92EF92FF926C01EE24FF24C114D104EA
+:10371000E104F10421F0C701B60120E101C020E07D
+:10372000C72ED82EE92EFF24C114D104E104F104E0
+:1037300019F0285FC701B6016B017C0154E0F694D3
+:10374000E794D794C7945A95D1F7C114D104E104F2
+:10375000F10419F02C5FC701B6016B017C0142E056
+:10376000F694E794D794C7944A95D1F7C114D1043D
+:10377000E104F10419F02E5FC701B601DC01CB01B1
+:10378000B695A79597958795892B8A2B8B2B09F052
+:103790002F5F822FFF90EF90DF90CF900895809160
+:1037A000E901843021F11092D50120E488E190E014
+:1037B0000FB6F894A895809360000FBE2093600028
+:1037C00080E00E94770883B7817F846083BF83B7DE
+:1037D000816083BF7894889583B78E7F83BF88E1AB
+:1037E0000FB6F89480936000109260000FBE0895A9
+:1037F00008950895CF930E94F81B0E9496040E949A
+:10380000F91BC0E08C2F0E948405811104C0CF5F9A
+:10381000CE30C1F701C081E0CF9108950E948B1492
+:103820000E94750F0C9477081F920F920FB60F929B
+:1038300011248F939F93AF93BF938091D5018111F2
+:1038400013C08091D6019091D701A091D801B09179
+:10385000D9014196A11DB11D8093D6019093D70146
+:10386000A093D801B093D901BF91AF919F918F914F
+:103870000F900FBE0F901F90189582E084BD93E0CB
+:1038800095BD9AEF97BD80936E0008952FB7F89479
+:103890008091D6019091D701A091D801B091D90122
+:1038A0002FBF0895CF92DF92EF92FF920F931F9355
+:1038B0002FB7F8944091D6015091D7016091D8016B
+:1038C0007091D9012FBF6A017B01EE24FF248C0186
+:1038D00020E030E0C016D106E206F30610F44150B5
+:1038E00051099A01281B390BC9011F910F91FF90B3
+:1038F000EF90DF90CF9008951F920F920FB60F9226
+:1039000011248F939F93AF93BF938091D601909191
+:10391000D701A091D801B091D9010196A11DB11D87
+:103920008093D6019093D701A093D801B093D90189
+:10393000BF91AF919F918F910F900FBE0F901F90ED
+:1039400018950E94720CF8942FEF87EA91E62150A7
+:1039500080409040E1F700C0000087E090EBDC0180
+:103960008093F3019093F401A093F501B093F601D5
+:103970009CE088E10FB6F894A895809360000FBE94
+:1039800090936000FFCFEF92FF920F931F93CF931E
+:10399000DF93D82FC0E08C2F0E94840500E010E058
+:1039A000E82EF12CC701002E02C0959587950A9448
+:1039B000E2F780FD06C00F5F1F4F0630110591F73B
+:1039C00009C0602F7C2F80E00E948C05D813F3CFB4
+:1039D00081E004C0CF5FCE30F1F680E0DF91CF917F
+:1039E0001F910F91FF90EF900895CF93C82F8CE215
+:1039F0000E94C31C882321F08C2FCF910C94C31CF0
+:103A000080E0CF910895CF930E944A1E811102C099
+:103A10000E94301EC5E6C15049F00E9496048FE313
+:103A20009CE90197F1F700C00000F5CF89E20E9400
+:103A3000F51C811113C18AE20E94F51C81110E94BC
+:103A4000301E85E00E94F51C81110E94A11C0E947D
+:103A5000551E8093D40187E00E94F51C8823A9F1AC
+:103A60008BE10E94F51C882351F08091D40181FBE9
+:103A7000222720F991E0922790FB81F90EC08EE079
+:103A80000E94F51C882361F08091D40182FB2227DB
+:103A900020F991E0922790FB82F98093D40115C020
+:103AA00080E10E94F51C9091D401882341F093FBA2
+:103AB000222720F981E0822780FB93F904C0892F17
+:103AC000809580FB90F99093D4018091D4010E945D
+:103AD000591E0E94671E8093F20180EE0E94F51C21
+:103AE000882341F08091F201982F909590FB80F906
+:103AF0008093F20189E30E94F51C882359F080919C
+:103B0000F20181FB222720F991E0922790FB81F9B5
+:103B10008093F20182EE0E94F51C882359F0809177
+:103B2000F20182FB222720F991E0922790FB82F993
+:103B30008093F20186EE0E94F51C882359F0809153
+:103B4000F20183FB222720F991E0922790FB83F971
+:103B50008093F20183EE0E94F51C882359F0809136
+:103B6000F20184FB222720F991E0922790FB84F94F
+:103B70008093F20185E30E94F51C882359F080911F
+:103B8000F20185FB222720F991E0922790FB85F92D
+:103B90008093F20181E30E94F51C882359F0809103
+:103BA000F20186FB222720F991E0922790FB86F90B
+:103BB0008093F20181E10E94F51C882359F08091E5
+:103BC000F20187FB222720F991E0922790FB87F9E9
+:103BD0008093F2018091F2010E946B1E8091F201AC
+:103BE00087FB882780F980930D0187E20E94F51CEE
+:103BF000C82F8EE10E94F51C8111C2608FE10E94E6
+:103C0000F51C8111C46080E20E94F51C8111C8601E
+:103C100081E20E94F51C8111C06182E20E94F51CC4
+:103C20008111C06283E20E94F51C8111C06484E2AC
+:103C30000E94F51C882311F0C06802C0CC2329F033
+:103C40008C2F0E94621E6C2F03C00E945E1E682F84
+:103C500070E080E090E0CF910C944B18CF910895E4
+:103C60006DEE7EEF80E090E00E94302460E082E024
+:103C700090E00E941E2460E083E090E00E941E24F9
+:103C800060E084E090E00E941E2460E085E090E027
+:103C90000C941E2480E090E00E94182421E08D3EC8
+:103CA0009E4F09F020E0822F089582E090E00C946E
+:103CB0001024682F82E090E00C941E2483E090E0B2
+:103CC0000C941024682F83E090E00C941E2484E070
+:103CD00090E00C941024682F84E090E00C941E2453
+:103CE0008091DC0180FF0BC06091130185E0689F2B
+:103CF000B001112475956795759567952BC081FF67
+:103D000009C06091130185E0689FB0011124759589
+:103D1000679520C082FF07C06091130185E0689F0E
+:103D2000B001112417C09091DD019923D1F0609169
+:103D30001201961788F72091130185E0289F9001C2
+:103D40001124929FA001939F500D112470E0CA018D
+:103D50000E94E2236038710540F46115710539F065
+:103D600002C065E070E0862F08958FE7089581E036
+:103D700008958091DC0180FF08C06091110170E01E
+:103D8000759567957595679521C081FF06C060910F
+:103D9000110170E07595679519C082FF04C06091AC
+:103DA000110170E010C09091DD019923C1F0609184
+:103DB00010019617A0F780911101899FC00111246D
+:103DC00070E00E94E2236038710528F461157105E6
+:103DD00021F0862F08958FE7089581E0089561E02E
+:103DE00070E0F4CF803F21F40E94701E819504C0E2
+:103DF000813F29F40E94701E8093E0010895823F64
+:103E000021F40E94701E819504C0833F29F40E9412
+:103E1000701E8093DF010895893F19F40E94B91E36
+:103E200005C08A3F31F40E94B91E81958093E1015B
+:103E300008958B3F21F40E94B91E819504C08C3FE8
+:103E400029F40E94B91E8093E2010895843F21F471
+:103E50008091DE01816017C0853F21F48091DE01F1
+:103E6000826011C0863F21F48091DE0184600BC026
+:103E7000873F21F48091DE01886005C0883F31F4DE
+:103E80008091DE0180618093DE0108958D3F21F4F1
+:103E90008091DC0181600BC08E3F21F48091DC01B8
+:103EA000826005C08F3F29F48091DC01846080939B
+:103EB000DC010895803F39F48091E00187FF6CC0F8
+:103EC0001092E00169C0813F29F48091E001181649
+:103ED000BCF362C09091DF01823F29F497FF5CC080
+:103EE0001092DF0159C0833F19F41916CCF354C066
+:103EF000893F41F48091E10118160CF04DC01092F9
+:103F0000E1014AC08A3F29F48091E10187FF44C062
+:103F1000F6CF8B3F39F48091E20187FF3DC01092CC
+:103F2000E2013AC08C3F29F48091E2011816BCF3FB
+:103F300033C0843F21F48091DE018E7F17C0853F1E
+:103F400021F48091DE018D7F11C0863F21F48091A4
+:103F5000DE018B7F0BC0873F21F48091DE01877FDC
+:103F600005C0883F31F48091DE018F7E8093DE01B1
+:103F700013C08D3F21F48091DC018E7F0BC08E3FFA
+:103F800021F48091DC018D7F05C08F3F29F4809161
+:103F9000DC018B7F8093DC018091DF0181110EC0F9
+:103FA0008091E00181110AC08091E101811106C078
+:103FB0008091E201811102C01092DD0108958EED21
+:103FC00091E00E948C0F0E94461C9093DB0180932D
+:103FD000DA0108951F93CF93DF938091DA019091D6
+:103FE000DB010E94521CAC019091DD01992321F06C
+:103FF0002091140130E006C0209115018AE0289F2D
+:10400000900111244217530708F486C08091DF0104
+:10401000C091E001D091E1011091E201811107C04E
+:10402000C11176C0D11174C0111172C075C09F3F0B
+:1040300019F09F5F9093DD01181624F40E94701E02
+:104040008093DF018091DF0187FF05C00E94701E11
+:1040500081958093DF011C1624F40E94701E8093CA
+:10406000E0018091E00187FF05C00E94701E8195EC
+:104070008093E0016091DF01662339F1C091E00196
+:10408000CC2319F1772767FD7095872F972F0E9412
+:10409000F32223E333E343E35FE30E9457230E94C9
+:1040A000C0226093DF016C2F772767FD7095872F03
+:1040B000972F0E94F32223E333E343E35FE30E945D
+:1040C00057230E94C0226093E0011D1624F40E9431
+:1040D000B91E8093E1018091E10187FF05C00E9434
+:1040E000B91E81958093E101111624F40E94B91E36
+:1040F0008093E2018091E20187FF05C00E94B91E12
+:1041000081958093E201DF91CF911F910C94DF1F85
+:104110009F3F09F08ECF96CFDF91CF911F910895E9
+:10412000EEEDF1E085E0DF011D928A95E9F710924E
+:10413000DD011092DC010895833081F128F4813093
+:1041400059F08230D1F00895853009F449C0B8F1B2
+:10415000863009F456C0089580911501262F30E06D
+:10416000280F311D2F3F310524F4680F609315018E
+:1041700008958FEF80931501089580911401262FE3
+:1041800030E0280F311D2F3F310524F4680F609374
+:10419000140108958FEF8093140108958091130105
+:1041A000262F30E0280F311D2F3F310524F4680FF2
+:1041B0006093130108958FEF809313010895809108
+:1041C0001201262F30E0280F311D2F3F310524F436
+:1041D000680F6093120108958FEF80931201089584
+:1041E00080911101262F30E0280F311D2F3F31051E
+:1041F00024F4680F6093110108958FEF80931101EB
+:10420000089580911001262F30E0280F311D2F3F97
+:10421000310524F4680F6093100108958FEF8093A7
+:1042200010010895833011F128F4813049F0823073
+:1042300091F00895853081F120F18630C1F1089523
+:1042400080911501681720F4861B8093150108954D
+:1042500010921501089580911401681720F4861BAF
+:104260008093140108951092140108958091130110
+:10427000681720F4861B8093130108951092130190
+:10428000089580911201681720F4861B8093120113
+:10429000089510921201089580911101681720F479
+:1042A000861B809311010895109211010895809149
+:1042B0001001681720F4861B809310010895109256
+:1042C000100108950F931F938B3109F475C0A0F569
+:1042D0008E3009F484C0C0F4873009F45BC068F400
+:1042E000863009F0AAC08091D401817F8E7F8093AF
+:1042F000D40181E08093E401A1C0883009F496C024
+:104300008B3009F493C099C0813109F472C068F40C
+:10431000803109F092C08091D40183FB222720F9DB
+:1043200091E0922790FB83F950C0863109F47EC05A
+:10433000893109F47BC081C0853309F479C068F400
+:10434000873209F475C028F48E3108F476C08D5197
+:104350005AC0893209F46CC070C0833438F48A338F
+:1043600008F050C0883309F461C067C0833409F491
+:104370005FC0883409F061C00E948B140FEF13ED09
+:1043800020E3015010402040E1F700C000000E94EF
+:10439000A11C4CC09091D401892F8095817080FB25
+:1043A00090F929F0966098609093D40147C0997F66
+:1043B000977F9093D4013AC08091D40181FB22274A
+:1043C00020F991E0922790FB81F98093D401992301
+:1043D00069F18091D40181608093D40127C08091DC
+:1043E000D40182FB222720F991E0922790FB82F9E9
+:1043F000ECCF0E948B1490910D0181E0892780936E
+:104400000D0114C0895341E050E060E070E08A0182
+:104410009B0104C0000F111F221F331F8A95D2F782
+:10442000C901B8010E944B180E948B1481E006C09C
+:1044300061E070E080E090E0F5CF80E01F910F91A7
+:10444000089580E0089580E00895CF93C82F80916B
+:10445000E401813079F018F08230E9F187C0E09111
+:104460000E01F0910F018081813169F0823209F0F3
+:104470007FC009C0E0910E01F0910F018081813170
+:1044800011F0823261F48C2F0E942122811104C02C
+:104490008C2F0E9462211DC081E090E01AC08C2FF9
+:1044A0000E942322811114C0C43179F048F4CB302A
+:1044B00079F0C03109F060C082E08093E40108C067
+:1044C000C93219F0C83321F057C01092E40154C02A
+:1044D00081E0817053C0C93289F118F5C43171F19E
+:1044E000A8F4C73009F046C08AE08093150194E132
+:1044F0009093140193E0909313018093120188E04C
+:104500008093110188E28093100134C0CE51C630EF
+:1045100088F5EC2FF0E0E65DFE4F80818093E301AB
+:1045200029C0CE34E9F020F4CB3421F56AE013C081
+:10453000C13579F0C235F1F461E00DC08091E3013D
+:10454000882319F01092E30115C081E08093E40103
+:1045500015C061E006C08091E3010E949C200AC062
+:104560006AE08091E3010E94122104C01092E401EC
+:1045700080E004C081E002C080E0ABCFCF9108951D
+:1045800004D06894B1118DC0089570D088F09F5701
+:1045900090F0B92F9927B751A0F0D1F0660F771F8F
+:1045A000881F991F1AF0BA95C9F712C0B13081F06F
+:1045B00077D0B1E0089574C0672F782F8827B85F4F
+:1045C00039F0B93FCCF3869577956795B395D9F7D0
+:1045D0003EF490958095709561957F4F8F4F9F4FDA
+:1045E0000895E89409C097FB3EF4909580957095E6
+:1045F00061957F4F8F4F9F4F9923A9F0F92F96E92F
+:10460000BB279395F695879577956795B795F111A3
+:10461000F8CFFAF4BB0F11F460FF1BC06F5F7F4F40
+:104620008F4F9F4F16C0882311F096E911C0772352
+:1046300021F09EE8872F762F05C0662371F096E85B
+:10464000862F70E060E02AF09A95660F771F881F2A
+:10465000DAF7880F9695879597F9089557FD905842
+:10466000440F551F59F05F3F71F04795880F97FB36
+:10467000991F61F09F3F79F08795089512161306F0
+:104680001406551FF2CF4695F1DF08C0161617061F
+:104690001806991FF1CF8695710561050894089554
+:1046A000E894BB2766277727CB0197F908950BD0AD
+:1046B00078C069D028F06ED018F0952309F05AC060
+:1046C0005FC01124EECFCADFA0F3959FD1F3950F01
+:1046D00050E0551F629FF001729FBB27F00DB11D86
+:1046E000639FAA27F00DB11DAA1F649F6627B00D16
+:1046F000A11D661F829F2227B00DA11D621F739FFF
+:10470000B00DA11D621F839FA00D611D221F749F0C
+:104710003327A00D611D231F849F600D211D822F53
+:10472000762F6A2F11249F5750408AF0E1F088239A
+:104730004AF0EE0FFF1FBB1F661F771F881F9150A7
+:104740005040A9F79E3F510570F014C0AACF5F3FBB
+:10475000ECF3983EDCF3869577956795B795F795DA
+:10476000E7959F5FC1F7FE2B880F911D9695879562
+:1047700097F9089597F99F6780E870E060E00895E1
+:104780009FEF80EC089500240A9416161706180669
+:104790000906089500240A94121613061406050645
+:1047A0000895092E0394000C11F4882352F0BB0FD6
+:1047B00040F4BF2B11F460FF04C06F5F7F4F8F4F39
+:1047C0009F4F089597FB072E16F4009407D077FDAE
+:1047D00009D00E94FC2307FC05D03EF490958195FA
+:1047E0009F4F0895709561957F4F0895EE0FFF1FBD
+:1047F0000590F491E02D0994AA1BBB1B51E107C061
+:10480000AA1FBB1FA617B70710F0A61BB70B881F60
+:10481000991F5A95A9F780959095BC01CD010895EF
+:10482000F999FECF92BD81BDF89A992780B5089578
+:10483000A8E1B0E042E050E00C943824262FF9992A
+:10484000FECF92BD81BDF89A019700B4021639F0EF
+:104850001FBA20BD0FB6F894FA9AF99A0FBE0895C0
+:104860000196272F0E941F240C941E24DC01CB01EB
+:10487000FC01F999FECF06C0F2BDE1BDF89A319670
+:1048800000B40D9241505040B8F70895F894FFCF0E
+:10489000200279080709E408B0087C080101C10179
+:1048A00028080A03140A3F4D3639A9045C0426047B
+:1048B000ED0380039903B203CB0301020304050651
+:0448C00007080900DC
+:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_base.png b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_base.png
new file mode 100644
index 000000000..f9bc8b443
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_base.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png
new file mode 100644
index 000000000..983b72348
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png
new file mode 100644
index 000000000..8f04b4327
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/twey/keymap.c b/keyboard/ergodox_ez/keymaps/twey/keymap.c
index dec9f92f1..019930f2a 100644
--- a/keyboard/ergodox_ez/keymaps/twey/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/twey/keymap.c
@@ -49,9 +49,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z , KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB),
- KC_HOME,KC_END,
+ KC_HOME, KC_END,
KC_RALT,
- KC_FN1,KC_SPC,KC_RCTL
+ MO(MDIA),KC_SPC,KC_RCTL
),
/* Keymap 1: Symbol Layer
*
@@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR,
KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
- KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_NO, KC_NO, KC_TRNS, KC_TRNS,
KC_NO, KC_NO,
KC_NO,
PV_A, PV_O, KC_NO,
@@ -111,10 +111,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
PV_STAR, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
- KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS,
KC_NO, KC_NO,
KC_NO,
- KC_FN1, PV_E, PV_U
+ KC_TRNS,PV_E, PV_U
),
/* Keymap 3: Media and mouse keys
@@ -122,19 +122,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | MsUp | | | | | | | | | | | |
+ * | | | | MsUp | | | | | | | Back | | Frwd | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | Prev | Play | Next | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | | | | | | | Prev | Next | | |
+ * | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
- * | | | | | | |Brwser|
- * | | |------| |------| |Back |
+ * | | | | | | | |
+ * | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
@@ -150,9 +150,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_WBAK, KC_TRNS, KC_WFWD, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, 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_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
@@ -171,15 +171,19 @@ void toggle_steno(int pressed)
if (pressed) {
if (layer != STEN) layer_on(STEN); else layer_off(STEN);
- register_code(PV_LS);
+ register_code(PV_LP);
register_code(PV_LH);
- register_code(PV_RF);
- register_code(PV_RT);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RL);
+ register_code(PV_RG);
} else {
- unregister_code(PV_LS);
+ unregister_code(PV_LP);
unregister_code(PV_LH);
- unregister_code(PV_RF);
- unregister_code(PV_RT);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RL);
+ unregister_code(PV_RG);
}
}
diff --git a/keyboard/ergodox_ez/keymaps/twey/readme.md b/keyboard/ergodox_ez/keymaps/twey/readme.md
index d44c0a238..979e4261e 100644
--- a/keyboard/ergodox_ez/keymaps/twey/readme.md
+++ b/keyboard/ergodox_ez/keymaps/twey/readme.md
@@ -3,8 +3,8 @@
- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all
modifiers on thumb keys, as well as return and space.
- Layer 1: Default symbol layout.
-- Layer 2: Default media/mouse layout.
-- Layer 3: Plover-oriented stenography layer.
+- Layer 2: Plover-oriented stenography layer.
+- Layer 3: Extended media/mouse layout.
## Unusual features
The Plover key (top right key on the left half) also sends my Plover
@@ -12,8 +12,6 @@ The Plover key (top right key on the left half) also sends my Plover
layer, so you can toggle between steno and typing modes with a single
keypress.
-If you want to use this feature, you'll need to add:
-
- "SH-FT": "{PLOVER:TOGGLE}"
-
-to your Plover dictionary.
+If you want to use this feature, you'll need to add the
+`commands.json` dictionary to your Plover dictionaries, or define the
+toggle stroke (`PHROLG`) yourself.
diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c
index d019b731f..e9963886b 100644
--- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c
@@ -55,11 +55,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | ! | @ | { | } | | | | | | / | 7 | 8 | 9 | * | F12 |
+ * | | [ | ] | { | } | | | | | / | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | + | |
+ * | | < | > | ( | ) | |------| |------| - | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | = | |
+ * | | | | | | | | | | & | 1 | 2 | 3 | = | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | . | ← | → | |
* `----------------------------------' `----------------------------------'
@@ -75,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 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_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,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,
@@ -109,8 +109,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
+ * | | |------| |------| ⌘C | ⌘V |
+ * | | | | | ⌘X | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
@@ -129,9 +129,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY,
KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
+ LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
),
};
@@ -139,6 +139,8 @@ const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
+// action_get_macro() is unused — remove the “#if 0” and “#endif” lines to reenable
+#if 0
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
@@ -153,6 +155,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
return MACRO_NONE;
};
+#endif
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboard/gh60_rev_c/gh60.c b/keyboard/gh60_rev_c/gh60.c
index 8e7219bfe..6da4d8ee3 100644
--- a/keyboard/gh60_rev_c/gh60.c
+++ b/keyboard/gh60_rev_c/gh60.c
@@ -12,8 +12,9 @@ void matrix_scan_user(void) {
}
__attribute__ ((weak))
-void process_action_user(keyrecord_t *record) {
+bool process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
+ return true;
}
__attribute__ ((weak))
@@ -35,11 +36,11 @@ void matrix_scan_kb(void) {
matrix_scan_user();
}
-void process_action_kb(keyrecord_t *record) {
+bool process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
- process_action_user(record);
+ return process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
diff --git a/keyboard/gh60_rev_c/gh60.h b/keyboard/gh60_rev_c/gh60.h
index 2373ad333..95e5e1ebc 100644
--- a/keyboard/gh60_rev_c/gh60.h
+++ b/keyboard/gh60_rev_c/gh60.h
@@ -75,7 +75,7 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
void matrix_init_user(void);
void matrix_scan_user(void);
-void process_action_user(keyrecord_t *record);
+bool process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
#endif
diff --git a/keyboard/planck/keymaps/alexey.c b/keyboard/planck/keymaps/alexey/alexey.c
index 89af4112c..89af4112c 100644
--- a/keyboard/planck/keymaps/alexey.c
+++ b/keyboard/planck/keymaps/alexey/alexey.c
diff --git a/keyboard/planck/keymaps/angerthosenear.c b/keyboard/planck/keymaps/angerthosenear/angerthosenear.c
index cdf60632e..cdf60632e 100644
--- a/keyboard/planck/keymaps/angerthosenear.c
+++ b/keyboard/planck/keymaps/angerthosenear/angerthosenear.c
diff --git a/keyboard/planck/keymaps/austin.c b/keyboard/planck/keymaps/austin/austin.c
index 49fc98a58..49fc98a58 100644
--- a/keyboard/planck/keymaps/austin.c
+++ b/keyboard/planck/keymaps/austin/austin.c
diff --git a/keyboard/planck/keymaps/bone2planck.c b/keyboard/planck/keymaps/bone2planck/bone2planck.c
index a99e7719f..a99e7719f 100644
--- a/keyboard/planck/keymaps/bone2planck.c
+++ b/keyboard/planck/keymaps/bone2planck/bone2planck.c
diff --git a/keyboard/planck/keymaps/brandon.c b/keyboard/planck/keymaps/brandon/brandon.c
index 2b89f86db..2b89f86db 100644
--- a/keyboard/planck/keymaps/brandon.c
+++ b/keyboard/planck/keymaps/brandon/brandon.c
diff --git a/keyboard/planck/keymaps/charlie.c b/keyboard/planck/keymaps/charlie/charlie.c
index 88f454d78..88f454d78 100644
--- a/keyboard/planck/keymaps/charlie.c
+++ b/keyboard/planck/keymaps/charlie/charlie.c
diff --git a/keyboard/planck/keymaps/daniel.c b/keyboard/planck/keymaps/daniel/daniel.c
index 234e48ff4..234e48ff4 100644
--- a/keyboard/planck/keymaps/daniel.c
+++ b/keyboard/planck/keymaps/daniel/daniel.c
diff --git a/keyboard/planck/keymaps/david.c b/keyboard/planck/keymaps/david/david.c
index f48308480..f48308480 100644
--- a/keyboard/planck/keymaps/david.c
+++ b/keyboard/planck/keymaps/david/david.c
diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c
index ac4937b69..36d496416 100644
--- a/keyboard/planck/keymaps/default/keymap.c
+++ b/keyboard/planck/keymaps/default/keymap.c
@@ -19,8 +19,7 @@ extern keymap_config_t keymap_config;
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
-#define _MUSIC 5
-#define _PLOVER 6
+#define _PLOVER 5
#define _ADJUST 16
// Macro name shortcuts
@@ -30,14 +29,9 @@ extern keymap_config_t keymap_config;
#define LOWER M(_LOWER)
#define RAISE M(_RAISE)
#define M_BL 5
-#define AUD_OFF M(6)
-#define AUD_ON M(7)
-#define MUS_OFF M(8)
-#define MUS_ON M(9)
-#define VC_IN M(10)
-#define VC_DE M(11)
#define PLOVER M(12)
#define EXT_PLV M(13)
+#define TOG_OUT M(14)
// Fillers to make layering more clear
#define _______ KC_TRNS
@@ -105,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -113,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
@@ -123,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -131,27 +125,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
-/* Music (reserved for process_action_user)
- *
- */
-[_MUSIC] = {
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
-},
-
/* Plover layer (http://opensteno.org)
* ,-----------------------------------------------------------------------------------.
* | # | # | # | # | # | # | # | # | # | # | # | # |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | S | T | P | H | * | * | F | P | L | T | D |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Exit | | | A | O | | E | U | | | |
* `-----------------------------------------------------------------------------------'
@@ -160,7 +144,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_PLOVER] = {
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
{XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
- {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {TOG_OUT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
},
@@ -177,8 +161,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = {
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
- {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
- {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
@@ -204,7 +188,6 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_plover[][2] = SONG(PLOVER_SOUND);
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
@@ -269,53 +252,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
- case 6:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- audio_off();
- #endif
- }
- break;
- case 7:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- audio_on();
- PLAY_NOTE_ARRAY(tone_startup, false, 0);
- #endif
- }
- break;
- case 8:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- layer_off(_MUSIC);
- stop_all_notes();
- #endif
- }
- break;
- case 9:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- layer_on(_MUSIC);
- #endif
- }
- break;
- case 10:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- voice_iterate();
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- #endif
- }
- break;
- case 11:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- voice_deiterate();
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- #endif
- }
- break;
case 12:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
@@ -325,7 +261,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
layer_off(_RAISE);
layer_off(_LOWER);
layer_off(_ADJUST);
- layer_off(_MUSIC);
layer_on(_PLOVER);
if (!eeconfig_is_enabled()) {
eeconfig_init();
@@ -343,7 +278,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
layer_off(_PLOVER);
}
break;
-
+ case 14:
+ if (record->event.pressed) {
+ return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
+ }
+ break;
}
return MACRO_NONE;
};
@@ -361,19 +300,4 @@ void play_goodbye_tone()
PLAY_NOTE_ARRAY(goodbye, false, 0);
_delay_ms(150);
}
-
-uint8_t starting_note = 0x0C;
-int offset = 0;
-
-void process_action_user(keyrecord_t *record) {
-
- if (IS_LAYER_ON(_MUSIC)) {
- if (record->event.pressed) {
- play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
- } else {
- stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
- }
- }
-
-}
#endif
diff --git a/keyboard/planck/keymaps/dzobert.c b/keyboard/planck/keymaps/dzobert/dzobert.c
index 665e9c20b..665e9c20b 100644
--- a/keyboard/planck/keymaps/dzobert.c
+++ b/keyboard/planck/keymaps/dzobert/dzobert.c
diff --git a/keyboard/planck/keymaps/experimental/README.md b/keyboard/planck/keymaps/experimental/README.md
new file mode 100644
index 000000000..de9680b49
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/README.md
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c
new file mode 100644
index 000000000..4b9c15e08
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/keymap.c
@@ -0,0 +1,333 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define PLOVER M(12)
+#define EXT_PLV M(13)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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 },
+ {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUHS, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+ {440.0*pow(2.0,(31)/12.0), 12},
+ {440.0*pow(2.0,(28)/12.0), 8},
+ {440.0*pow(2.0,(19)/12.0), 8},
+ {440.0*pow(2.0,(24)/12.0), 8},
+ {440.0*pow(2.0,(28)/12.0), 20}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ #ifdef BACKLIGHT_ENABLE
+ breathing_speed_set(2);
+ breathing_pulse();
+ #endif
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ #ifdef BACKLIGHT_ENABLE
+ breathing_speed_set(2);
+ breathing_pulse();
+ #endif
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 12:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ break;
+ case 13:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ break;
+
+ }
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // stops the tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+ void play_goodbye_tone(void)
+ {
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+ }
+#endif
+
+LEADER_EXTERNS();
+
+#define LEADER_TIMEOUT 300
+
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(KC_F) {
+ register_code(KC_S);
+ unregister_code(KC_S);
+ }
+ SEQ_TWO_KEYS(KC_A, KC_S) {
+ register_code(KC_H);
+ unregister_code(KC_H);
+ }
+ SEQ_THREE_KEYS(KC_A, KC_S, KC_D) {
+ register_code(KC_LGUI);
+ register_code(KC_S);
+ unregister_code(KC_S);
+ unregister_code(KC_LGUI);
+ }
+ }
+}
diff --git a/keyboard/planck/keymaps/experimental/makefile.mk b/keyboard/planck/keymaps/experimental/makefile.mk
new file mode 100644
index 000000000..6c1e05b65
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/makefile.mk
@@ -0,0 +1,5 @@
+AUDIO_ENABLE = yes
+NKRO_ENABLE = yes
+MIDI_ENABLE = yes
+BACKLIGHT_ENABLE = no
+COMMAND_ENABLE = no \ No newline at end of file
diff --git a/keyboard/planck/keymaps/gabriel.c b/keyboard/planck/keymaps/gabriel/gabriel.c
index 805484488..805484488 100644
--- a/keyboard/planck/keymaps/gabriel.c
+++ b/keyboard/planck/keymaps/gabriel/gabriel.c
diff --git a/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG b/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG
new file mode 100644
index 000000000..40f0b8942
--- /dev/null
+++ b/keyboard/planck/keymaps/jacob/Keyboard Layout.PNG
Binary files differ
diff --git a/keyboard/planck/keymaps/jacob/keymap.c b/keyboard/planck/keymaps/jacob/keymap.c
new file mode 100644
index 000000000..5e6e8498e
--- /dev/null
+++ b/keyboard/planck/keymaps/jacob/keymap.c
@@ -0,0 +1,56 @@
+#include "planck.h"
+#include "action_layer.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+//Simple Keymap where CTRL, WINKEY, and ALT keys are placed in a more familiar location for Windows users.
+//Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck.
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define _QW 0
+#define _LW 1
+#define _RS 2
+
+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, MT(MOD_RSFT, KC_ENT)},
+ {KC_LCTL, KC_LGUI, KC_LALT, M(0), 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_DEL },
+ {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, 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}
+ },
+ [_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_DEL },
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/jacob/readme.md b/keyboard/planck/keymaps/jacob/readme.md
new file mode 100644
index 000000000..2a4be4ebc
--- /dev/null
+++ b/keyboard/planck/keymaps/jacob/readme.md
@@ -0,0 +1 @@
+Focus of this particular keymap is to enable easy transition from more traditional keyboards to OLKB Planck. \ No newline at end of file
diff --git a/keyboard/planck/keymaps/joe.c b/keyboard/planck/keymaps/joe/joe.c
index 5b7bbe2bb..5b7bbe2bb 100644
--- a/keyboard/planck/keymaps/joe.c
+++ b/keyboard/planck/keymaps/joe/joe.c
diff --git a/keyboard/planck/keymaps/kyle.c b/keyboard/planck/keymaps/kyle/kyle.c
index da32b74f9..da32b74f9 100644
--- a/keyboard/planck/keymaps/kyle.c
+++ b/keyboard/planck/keymaps/kyle/kyle.c
diff --git a/keyboard/planck/keymaps/leo.c b/keyboard/planck/keymaps/leo/leo.c
index 6d6644182..6d6644182 100644
--- a/keyboard/planck/keymaps/leo.c
+++ b/keyboard/planck/keymaps/leo/leo.c
diff --git a/keyboard/planck/keymaps/lucas.c b/keyboard/planck/keymaps/lucas/lucas.c
index 27672e1bb..27672e1bb 100644
--- a/keyboard/planck/keymaps/lucas.c
+++ b/keyboard/planck/keymaps/lucas/lucas.c
diff --git a/keyboard/planck/keymaps/lukas.c b/keyboard/planck/keymaps/lukas/lukas.c
index 6fd95378b..6fd95378b 100644
--- a/keyboard/planck/keymaps/lukas.c
+++ b/keyboard/planck/keymaps/lukas/lukas.c
diff --git a/keyboard/planck/keymaps/max.c b/keyboard/planck/keymaps/max/max.c
index 7fb29bc7a..7fb29bc7a 100644
--- a/keyboard/planck/keymaps/max.c
+++ b/keyboard/planck/keymaps/max/max.c
diff --git a/keyboard/planck/keymaps/mollat.c b/keyboard/planck/keymaps/mollat/mollat.c
index e7c71efd4..e7c71efd4 100644
--- a/keyboard/planck/keymaps/mollat.c
+++ b/keyboard/planck/keymaps/mollat/mollat.c
diff --git a/keyboard/planck/keymaps/monkey.c b/keyboard/planck/keymaps/monkey/monkey.c
index 21a2c146a..21a2c146a 100644
--- a/keyboard/planck/keymaps/monkey.c
+++ b/keyboard/planck/keymaps/monkey/monkey.c
diff --git a/keyboard/planck/keymaps/nico.c b/keyboard/planck/keymaps/nico/nico.c
index e81fd80a4..e81fd80a4 100644
--- a/keyboard/planck/keymaps/nico.c
+++ b/keyboard/planck/keymaps/nico/nico.c
diff --git a/keyboard/planck/keymaps/numpad.c b/keyboard/planck/keymaps/numpad/numpad.c
index 7de4372ab..7de4372ab 100644
--- a/keyboard/planck/keymaps/numpad.c
+++ b/keyboard/planck/keymaps/numpad/numpad.c
diff --git a/keyboard/planck/keymaps/pete/README.md b/keyboard/planck/keymaps/pete/README.md
new file mode 100644
index 000000000..3cf594f3a
--- /dev/null
+++ b/keyboard/planck/keymaps/pete/README.md
@@ -0,0 +1,14 @@
+# Planck Layout by Pete
+
+This layout is based on the default layout but uses a FN key in the bottom left corner instead of the shift / backlight key.
+On the FN layer you can do the following things
+
+- Step through back light
+- Put a mac to sleep
+- The Fxx keys in a block to click with the right hand
+- The delete key in the upper right corner
+- Quick access to screenshot functions
+- Control volume and media playback
+- Home/PgDown/PgUp/End buttons where the arrow keys are
+
+Pressing the lower and raise buttons allows to reset and change from QWERT to Colemak or Dvorak.
diff --git a/keyboard/planck/keymaps/pete/keymap.c b/keyboard/planck/keymaps/pete/keymap.c
new file mode 100644
index 000000000..57cab65a3
--- /dev/null
+++ b/keyboard/planck/keymaps/pete/keymap.c
@@ -0,0 +1,223 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _FCT 5
+#define _SETUP 6
+#define _MICMUTE 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define FCT M(_FCT)
+#define MICMUTE M(_MICMUTE)
+
+#define MACPRNT LGUI(LSFT(KC_3))
+#define MACPRNT2 LGUI(LSFT(KC_4))
+#define CYCLWIN LGUI(KC_GRV)
+#define MAC_SLEP LSFT(LCTL(KC_POWER))
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_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 },
+ {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+[_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 },
+ {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+[_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 },
+ {FCT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+[_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_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+[_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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+[_FCT] = { /* Function */
+ {BL_STEP, MAC_SLEP,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_DELT},
+ {_______, MICMUTE, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, MACPRNT},
+ {_______, CYCLWIN, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, MACPRNT2},
+ {FCT, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDOWN,KC_PGUP,KC_END }
+},
+
+[_SETUP] = { /* Setup */
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+ {440.0*pow(2.0,(31)/12.0), 12},
+ {440.0*pow(2.0,(28)/12.0), 8},
+ {440.0*pow(2.0,(19)/12.0), 8},
+ {440.0*pow(2.0,(24)/12.0), 8},
+ {440.0*pow(2.0,(28)/12.0), 20}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _SETUP);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _SETUP);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _SETUP);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _SETUP);
+ }
+ break;
+ case _FCT:
+ if (record->event.pressed) {
+ layer_on(_FCT);
+ } else {
+ layer_off(_FCT);
+ }
+ break;
+ case _MICMUTE:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_RALT);
+ register_code(KC_RGUI);
+ } else {
+ unregister_code(KC_RSFT);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RALT);
+ unregister_code(KC_RGUI);
+ }
+ break;
+
+ }
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // stops the tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+
+uint8_t starting_note = 0x0C;
+int offset = 0;
+
+void process_action_user(keyrecord_t *record) {
+
+ if (IS_LAYER_ON(_MUSIC)) {
+ if (record->event.pressed) {
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ } else {
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ }
+ }
+
+}
+#endif
diff --git a/keyboard/planck/keymaps/pete/makefile.mk b/keyboard/planck/keymaps/pete/makefile.mk
new file mode 100644
index 000000000..812264cb3
--- /dev/null
+++ b/keyboard/planck/keymaps/pete/makefile.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = no
+NKRO_ENABLE = yes \ No newline at end of file
diff --git a/keyboard/planck/keymaps/pvc/config.h b/keyboard/planck/keymaps/pvc/config.h
index 7d64f0977..d435cc795 100644
--- a/keyboard/planck/keymaps/pvc/config.h
+++ b/keyboard/planck/keymaps/pvc/config.h
@@ -73,7 +73,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-//#define NO_DEBUG
+#define NO_DEBUG
/* disable print */
//#define NO_PRINT
diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c
index 27850b215..177f04484 100644
--- a/keyboard/planck/keymaps/pvc/keymap.c
+++ b/keyboard/planck/keymaps/pvc/keymap.c
@@ -38,6 +38,7 @@
#define MACRO_AUDIO_OFF 17
#define MACRO_INC_VOICE 18
#define MACRO_DEC_VOICE 19
+#define MACRO_BACKLIGHT 20
#define M_QWRTY M(MACRO_QWERTY)
#define M_COLMK M(MACRO_COLEMAK)
@@ -53,6 +54,7 @@
#define TMPO_UP M(MACRO_TEMPO_U)
#define TMPO_DN M(MACRO_TEMPO_D)
#define TMPO_DF M(MACRO_TONE_DEFAULT)
+#define M_BACKL M(MACRO_BACKLIGHT)
#define MUS_ON M(MACRO_MUSIC_ON)
@@ -96,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_QWERTY] = { /* QWERTY */
{ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
- { KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
+ { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
},
@@ -115,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_COLEMAK] = { /* COLEMAK */
{ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC },
- { KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT },
+ { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
},
@@ -217,7 +219,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_ADJUST] = { /* ADJUST */
{ _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF },
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ },
},
@@ -337,6 +339,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
break;
+
+#ifdef BACKLIGHT_ENABLE
+ case MACRO_BACKLIGHT:
+ if (record->event.pressed)
+ {
+ backlight_step();
+ }
+#endif
+
#ifdef MOUSEKEY_ENABLE
case MACRO_MOUSE:
diff --git a/keyboard/planck/keymaps/pvc/makefile.mk b/keyboard/planck/keymaps/pvc/makefile.mk
index 4b9e34c53..f7798b09d 100644
--- a/keyboard/planck/keymaps/pvc/makefile.mk
+++ b/keyboard/planck/keymaps/pvc/makefile.mk
@@ -1,11 +1,12 @@
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
+CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
+AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
@@ -13,4 +14,4 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CONFIG_H = keymaps/$(KEYMAP)/config.h
+CONFIG_H = keymaps/$(KEYMAP)/config.h \ No newline at end of file
diff --git a/keyboard/planck/keymaps/tak3over.c b/keyboard/planck/keymaps/tak3over/tak3over.c
index 7d8243dfa..7d8243dfa 100644
--- a/keyboard/planck/keymaps/tak3over.c
+++ b/keyboard/planck/keymaps/tak3over/tak3over.c
diff --git a/keyboard/planck/keymaps/unicode/keymap.c b/keyboard/planck/keymaps/unicode/keymap.c
new file mode 100644
index 000000000..d73e7e09d
--- /dev/null
+++ b/keyboard/planck/keymaps/unicode/keymap.c
@@ -0,0 +1,326 @@
+/*
+ Copyright
+ 2015 Jack Humbert <jack.humb@gmail.com>
+ 2016 Francois Marlier <fmarlier@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ For more info on how this works per OS, see here
+ https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
+*/
+
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define PLOVER M(12)
+#define EXT_PLV M(13)
+#define TOG_OUT M(14)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_TAB, UC_q, UC_w, UC_f, UC_p, UC_g, UC_j, UC_l, UC_u, UC_y, UC_SCLN, UC_BSPC},
+ {KC_ESC, UC_a, UC_r, UC_s, UC_t, UC_d, UC_h, UC_n, UC_e, UC_i, UC_o, UC_QUOT},
+ {KC_LSFT, UC_z, UC_x, UC_c, UC_v, UC_b, UC_k, UC_m, UC_COMM, UC_DOT, UC_SLSH, KC_ENT},
+ {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {TOG_OUT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+ {440.0*pow(2.0,(31)/12.0), 12},
+ {440.0*pow(2.0,(28)/12.0), 8},
+ {440.0*pow(2.0,(19)/12.0), 8},
+ {440.0*pow(2.0,(24)/12.0), 8},
+ {440.0*pow(2.0,(28)/12.0), 20}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 12:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ break;
+ case 13:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ break;
+ case 14:
+ if (record->event.pressed) {
+ return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // stops the tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+#endif
+
+
diff --git a/keyboard/planck/keymaps/unicode/makefile.mk b/keyboard/planck/keymaps/unicode/makefile.mk
new file mode 100644
index 000000000..9b27b08be
--- /dev/null
+++ b/keyboard/planck/keymaps/unicode/makefile.mk
@@ -0,0 +1 @@
+UNICODE_ENABLE = yes # Unicode
diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c
index 655850150..da7b3a170 100644
--- a/keyboard/planck/planck.c
+++ b/keyboard/planck/planck.c
@@ -7,7 +7,12 @@ __attribute__ ((weak))
void matrix_scan_user(void) {}
__attribute__ ((weak))
-void process_action_user(keyrecord_t *record) {}
+bool process_action_user(keyrecord_t *record) {
+ return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {}
void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
@@ -29,12 +34,26 @@ void matrix_scan_kb(void) {
matrix_scan_user();
}
-void process_action_kb(keyrecord_t *record) {
- process_action_user(record);
+bool process_action_kb(keyrecord_t *record) {
+ return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
+#define BREATHING_NO_HALT 0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON 2
+
+static uint8_t breath_intensity;
+static uint8_t breath_speed;
+static uint16_t breathing_index;
+static uint8_t breathing_halt;
void backlight_init_ports()
{
@@ -60,22 +79,22 @@ void backlight_init_ports()
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
+ breathing_defaults();
}
void backlight_set(uint8_t level)
{
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
@@ -83,13 +102,205 @@ void backlight_set(uint8_t level)
}
else
{
- // Prevent backlight blink on lowest level
- PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
+ breathing_intensity_default();
+}
+
+
+void breathing_enable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint (brightest point)
+ breathing_index = 0x20 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_pulse(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_HALT_ON;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_disable(void)
+{
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ backlight_set(get_backlight_level());
+}
+
+void breathing_self_disable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_halt = BREATHING_HALT_OFF;
+ }
+ else
+ {
+ breathing_halt = BREATHING_HALT_ON;
+ }
+
+ //backlight_set(get_backlight_level());
+}
+
+void breathing_toggle(void)
+{
+ if (!is_breathing())
+ {
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+ }
+
+ // Toggle breathing interrupt
+ TIMSK1 ^= _BV(OCIE1A);
+
+ // Restore backlight level
+ if (!is_breathing())
+ {
+ backlight_set(get_backlight_level());
+ }
+}
+
+bool is_breathing(void)
+{
+ return (TIMSK1 && _BV(OCIE1A));
+}
+
+void breathing_intensity_default(void)
+{
+ //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
+ breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
+}
+
+void breathing_intensity_set(uint8_t value)
+{
+ breath_intensity = value;
+}
+
+void breathing_speed_default(void)
+{
+ breath_speed = 4;
+}
+
+void breathing_speed_set(uint8_t value)
+{
+ bool is_breathing_now = is_breathing();
+ uint8_t old_breath_speed = breath_speed;
+
+ if (is_breathing_now)
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ breath_speed = value;
+
+ if (is_breathing_now)
+ {
+ // Adjust index to account for new speed
+ breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+ }
+
}
+void breathing_speed_inc(uint8_t value)
+{
+ if ((uint16_t)(breath_speed - value) > 10 )
+ {
+ breathing_speed_set(0);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed - value);
+ }
+}
+
+void breathing_speed_dec(uint8_t value)
+{
+ if ((uint16_t)(breath_speed + value) > 10 )
+ {
+ breathing_speed_set(10);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed + value);
+ }
+}
+
+void breathing_defaults(void)
+{
+ breathing_intensity_default();
+ breathing_speed_default();
+ breathing_halt = BREATHING_NO_HALT;
+}
+
+/* Breathing Sleep LED brighness(PWM On period) table
+ * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
+ *
+ * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
+ * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
+ */
+static const uint8_t breathing_table[64] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
+ 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
+255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
+ 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+ISR(TIMER1_COMPA_vect)
+{
+ // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
+
+
+ uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
+
+ if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
+
+}
+
+
+
#endif \ No newline at end of file
diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h
index c5b59d999..8aec6b262 100644
--- a/keyboard/planck/planck.h
+++ b/keyboard/planck/planck.h
@@ -1,19 +1,7 @@
#ifndef PLANCK_H
#define PLANCK_H
-#include "matrix.h"
-#include "keymap_common.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
- #include "rgblight.h"
-#endif
-#include <stddef.h>
-#include <avr/io.h>
-#ifdef MIDI_ENABLE
- #include <keymap_midi.h>
-#endif
+#include "quantum.h"
#define PLANCK_MIT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
@@ -43,6 +31,24 @@
void matrix_init_user(void);
void matrix_scan_user(void);
-void process_action_user(keyrecord_t *record);
+bool process_action_user(keyrecord_t *record);
+
+void led_set_user(uint8_t usb_led);
+void backlight_init_ports(void);
+
+void breathing_enable(void);
+void breathing_pulse(void);
+void breathing_disable(void);
+void breathing_self_disable(void);
+void breathing_toggle(void);
+bool is_breathing(void);
+
+
+void breathing_defaults(void);
+void breathing_intensity_default(void);
+void breathing_speed_default(void);
+void breathing_speed_set(uint8_t value);
+void breathing_speed_inc(uint8_t value);
+void breathing_speed_dec(uint8_t value);
#endif
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index b3aa14dcb..06e664713 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -14,7 +14,6 @@
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
-#define _MUSIC 5
#define _ADJUST 16
// Macro name shortcuts
@@ -24,12 +23,6 @@
#define LOWER M(_LOWER)
#define RAISE M(_RAISE)
#define M_BL 5
-#define AUD_OFF M(6)
-#define AUD_ON M(7)
-#define MUS_OFF M(8)
-#define MUS_ON M(9)
-#define VC_IN M(10)
-#define VC_DE M(11)
// Fillers to make layering more clear
#define _______ KC_TRNS
@@ -108,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -117,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
@@ -129,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -138,21 +131,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{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_DEL},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
-/* Music (reserved for process_action_user)
- *
- */
-[_MUSIC] = {
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
-},
-
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -169,8 +151,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = {
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
- {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
- {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
@@ -193,7 +175,6 @@ float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
@@ -257,53 +238,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
- case 6:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- audio_off();
- #endif
- }
- break;
- case 7:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- audio_on();
- PLAY_NOTE_ARRAY(start_up, false, 0);
- #endif
- }
- break;
- case 8:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- layer_off(_MUSIC);
- stop_all_notes();
- #endif
- }
- break;
- case 9:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- layer_on(_MUSIC);
- #endif
- }
- break;
- case 10:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- voice_iterate();
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- #endif
- }
- break;
- case 11:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- voice_deiterate();
- PLAY_NOTE_ARRAY(music_scale, false, 0);
- #endif
- }
- break;
}
return MACRO_NONE;
};
@@ -318,21 +252,6 @@ void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
-uint8_t starting_note = 0x0C;
-int offset = 0;
-
-void process_action_user(keyrecord_t *record) {
-
- if (IS_LAYER_ON(_MUSIC)) {
- if (record->event.pressed) {
- play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
- } else {
- stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
- }
- }
-
-}
-
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(goodbye, false, 0);
diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c
index 211f8d029..13e05c65a 100644
--- a/keyboard/preonic/preonic.c
+++ b/keyboard/preonic/preonic.c
@@ -11,8 +11,8 @@ void matrix_scan_user(void) {
};
__attribute__ ((weak))
-void process_action_user(keyrecord_t *record) {
-
+bool process_action_user(keyrecord_t *record) {
+ return true;
};
void matrix_init_kb(void) {
@@ -36,8 +36,8 @@ void matrix_scan_kb(void) {
matrix_scan_user();
};
-void process_action_kb(keyrecord_t *record) {
- process_action_user(record);
+bool process_action_kb(keyrecord_t *record) {
+ return process_action_user(record);
}
#ifdef BACKLIGHT_ENABLE
diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h
index 030acdadb..feb879774 100644
--- a/keyboard/preonic/preonic.h
+++ b/keyboard/preonic/preonic.h
@@ -1,19 +1,7 @@
#ifndef PREONIC_H
#define PREONIC_H
-#include "matrix.h"
-#include "keymap_common.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
- #include "rgblight.h"
-#endif
-#include <stddef.h>
-#include <avr/io.h>
-#ifdef MIDI_ENABLE
- #include <keymap_midi.h>
-#endif
+#include "quantum.h"
#define PREONIC_MIT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
@@ -47,6 +35,6 @@
void matrix_init_user(void);
void matrix_scan_user(void);
-void process_action_kb(keyrecord_t *record);
+bool process_action_kb(keyrecord_t *record);
#endif