diff options
author | Christopher Browne <cbbrowne@ca.afilias.info> | 2016-05-24 12:34:08 -0400 |
---|---|---|
committer | Christopher Browne <cbbrowne@ca.afilias.info> | 2016-05-24 12:34:08 -0400 |
commit | 48871b9b6b99201abc381ee27cfd94e211ca131a (patch) | |
tree | ed5fe45f9f38e364b53a1bac35084782ec6aaf2c /keyboard/preonic | |
parent | c2a3df31239249b2fb65e2552376daac0e49ae61 (diff) | |
parent | 287eb7ad148abc8fe3fb014218d71e205fd9131d (diff) |
Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
Diffstat (limited to 'keyboard/preonic')
-rw-r--r-- | keyboard/preonic/Makefile | 5 | ||||
-rw-r--r-- | keyboard/preonic/backlight.c | 61 | ||||
-rw-r--r-- | keyboard/preonic/config.h | 7 | ||||
-rw-r--r-- | keyboard/preonic/keymaps/default/keymap.c | 93 | ||||
-rw-r--r-- | keyboard/preonic/preonic.c | 71 | ||||
-rw-r--r-- | keyboard/preonic/preonic.h | 15 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb_r1.hex | 3328 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb_r1_w_bootloader.hex | 3071 |
8 files changed, 3249 insertions, 3402 deletions
diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 3504e27201..259dd6686b 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -162,11 +162,6 @@ endif endif -ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) - SRC := backlight.c $(SRC) -endif - - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboard/preonic/backlight.c b/keyboard/preonic/backlight.c deleted file mode 100644 index f69364b2af..0000000000 --- a/keyboard/preonic/backlight.c +++ /dev/null @@ -1,61 +0,0 @@ - -#include <avr/io.h> -#include "backlight.h" - -#define CHANNEL OCR1C - -void backlight_init_ports() -{ - - // Setup PB7 as output and output low. - DDRB |= (1<<7); - PORTB &= ~(1<<7); - - // Use full 16-bit resolution. - ICR1 = 0xFFFF; - - // I could write a wall of text here to explain... but TL;DW - // Go read the ATmega32u4 datasheet. - // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on - - // Pin PB7 = OCR1C (Timer 1, Channel C) - // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 - // (i.e. start high, go low when counter matches.) - // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 - // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 - - TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - } - else if ( level == BACKLIGHT_LEVELS ) - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF; - } - else - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } -}
\ No newline at end of file diff --git a/keyboard/preonic/config.h b/keyboard/preonic/config.h index bb9d29dab7..e8d0e82fc9 100644 --- a/keyboard/preonic/config.h +++ b/keyboard/preonic/config.h @@ -33,8 +33,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MATRIX_COLS 12 /* Planck PCB default pin-out */ -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D2, D5, B5, B6, D3 } +#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -46,7 +47,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCING_DELAY 5 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 95b9718762..06e6647136 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 = 7; - -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 f639f247a5..13e05c65a7 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,6 +36,67 @@ void matrix_scan_kb(void) { matrix_scan_user(); }; -void process_action_kb(keyrecord_t *record) { - process_action_user(record); -}
\ No newline at end of file +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); +} + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif
\ No newline at end of file diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 51ed9ba393..feb8797744 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -1,18 +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> -#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, \ @@ -46,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 diff --git a/keyboard/preonic/preonic_pcb_r1.hex b/keyboard/preonic/preonic_pcb_r1.hex index 5bdc190e1d..eda1b1979f 100644 --- a/keyboard/preonic/preonic_pcb_r1.hex +++ b/keyboard/preonic/preonic_pcb_r1.hex @@ -1,1702 +1,1628 @@ -:100000000C94D4020C9418030C9418030C94180349
-:100010000C9418030C9418030C9418030C941803F4
-:100020000C9418030C9418030C94E8160C94BA174B
-:100030000C946C290C9418030C9418030C9418035A
-:100040000C9418030C9418030C9418030C941803C4
-:100050000C9418030C94D9290C9418030C941803CD
-:100060000C9418030C9418030C9418030C941803A4
-:100070000C9418030C9418030C9418030C94180394
-:100080000C941C0E0C9418030C9418030C94180375
-:100090000C9418030C9418030C9418030C94180374
-:1000A0000C9418030C9418030C941803076342363D
-:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
-:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
-:1000D0000000803F08000000BE922449123EABAAF7
-:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
-:1000F000AA3E00000000BF000000803F000000009A
-:1001000000084178D3BB4387D1133D190E3CC3BDD2
-:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
-:1001200080EFFFBE01C4FF7F3F00000000003500EC
-:100130001E001F00200021002200230024002500B3
-:10014000260027002A002B0014001A0008001500C2
-:1001500017001C0018000C00120013002A002900D0
-:1001600004001600070009000A000B000D000E0035
-:100170000F0033003400E1001D001B0006001900D1
-:10018000050011001000360037003800280000304C
-:10019000E000E200E30003522C002C000452500067
-:1001A000510052004F0035001E001F0020002100AA
-:1001B0002200230024002500260027002A002B000F
-:1001C00014001A00090013000A000D000F001800A7
-:1001D0001C0033002A002900040015001600170037
-:1001E00007000B00110008000C0012003400E100B1
-:1001F0001D001B000600190005000E00100036004F
-:100200003700380028000030E000E200E30003522D
-:100210002C002C0004525000510052004F003500B9
-:100220001E001F00200021002200230024002500C2
-:10023000260027002A002B00340036003700130068
-:100240001C0009000A00060015000F002A00290002
-:1002500004001200080018000C0007000B00170033
-:10026000110016003800E100330014000D000E00EC
-:100270001B00050010001A0019001D0028000030A6
-:10028000E000E200E30003522C002C000452500076
-:10029000510052004F0035001E001F0020002100B9
-:1002A0002200230024002500260027002A00350212
-:1002B0001E021F0220022102220223022402250222
-:1002C000260227022A0001003A003B003C003D00C4
-:1002D0003E003F002D022E022F02300231020100AB
-:1002E00040004100420043004400450000530153D8
-:1002F0000253005001000100010001000100010053
-:10030000010001000100AB00AA00A900AE00350009
-:100310001E001F00200021002200230024002500D1
-:10032000260027002A0035001E001F0020002100A3
-:100330002200230024002500260027002A000100B7
-:100340003A003B003C003D003E003F002D002E00E7
-:100350002F00300031000100400041004200430006
-:1003600044004500005301530253005001000100B6
-:100370000100010001000100010001000100AB00CB
-:10038000AA00A900AE002A035400680065002000FE
-:100390005000720065006F006E006900630020006D
-:1003A0004B006500790062006F006100720064001C
-:1003B00000002C034F007200740068006F006C0096
-:1003C00069006E0065006100720020004B0065004E
-:1003D000790062006F006100720064007300000029
-:1003E000040309040902D000060100A0FA09040070
-:1003F000000103010100092111010001223F000752
-:1004000005810308000A0904010001030102000933
-:100410002111010001224D000705820308000A098D
-:10042000040200010300000009211101000122362D
-:10043000000705830308000A090403000203000003
-:10044000000921110100012220000705840320007A
-:100450000107050403200001090404000001010054
-:100460000009240100010900010509040500020139
-:1004700003000007240100014100062402010100DD
-:1004800006240202020009240301030102010009FB
-:1004900024030204010101000905060240000500D1
-:1004A0000005250101010905850240000500000540
-:1004B000250101031201100100000008EDFE61603A
-:1004C0000100010200010631FF0974A1010975153F
-:1004D0000025FF9520750881020976150025FF95F6
-:1004E0002075089102C005010980A101850216014D
-:1004F0000026B7001A01002AB70075109501810087
-:10050000C0050C0901A1018503160100269C021AF1
-:1005100001002A9C02751095018100C005010902A5
-:10052000A1010901A10005091901290515002501ED
-:100530009505750181029501750381010501093059
-:1005400009311581257F95027508810609381581C5
-:10055000257F950175088106050C0A38021581254D
-:100560007F950175088106C0C005010906A1010536
-:100570000719E029E7150025019508750181029505
-:100580000175088101050819012905950575019175
-:10059000029501750391010507190029FF15002532
-:1005A000FF950675088100C011241FBECFEFDAE069
-:1005B000DEBFCDBF04B603FE24C080910404909139
-:1005C0000504A0910604B09107048730904BA74022
-:1005D000B04BB9F410920404109205041092060472
-:1005E0001092070414BE84B7877F84BF88E10FB6DA
-:1005F000F89480936000109260000FBEE0E0F8E392
-:10060000099512E0A0E0B1E0EEE1F9E602C0059044
-:100610000D92A832B107D9F714E0A8E2B2E001C008
-:100620001D92A430B107E1F70E94A0130C948D3401
-:100630000C94000061110DC0FC018281882331F00F
-:1006400085EE0E94671E0E94683003C085EE0E94FE
-:100650002F1F80E090E008950E940F0E40E050E0D0
-:1006600069E070E080E091E00C94600F08950E94D2
-:1006700049036E9A769A8CE293E0892B11F00C94E0
-:100680002C03089586E393E0892B11F00C94360334
-:100690000895279A2F988FEF9FEF9093870080936C
-:1006A00086008AE08093800089E1809381000C9429
-:1006B000113081110BC080918000877F8093800072
-:1006C00010928D0010928C002F9808952F988330EF
-:1006D00041F4809180008860809380008FEF9FEFCD
-:1006E00012C09091800098609093800023E030E0E9
-:1006F000281B3109220F331F8FEF9FEF02C0969501
-:1007000087952A95E2F790938D0080938C00089549
-:100710008B3B910568F4883A910530F5853A91054F
-:10072000C0F48430910598F4019709F06FC071C04E
-:10073000803E910508F46AC0883E910540F09C0116
-:10074000205F31092031310508F060C05CC09C0198
-:10075000A1C0853A910509F45FC0863A910509F474
-:100760005EC023E830E496C0883A910509F45AC087
-:10077000893A910509F459C08A3A910509F458C09B
-:100780008B3A910509F457C08C3A910509F456C08B
-:100790008D3A910509F455C0803B910509F454C088
-:1007A0008E3A910509F453C08F3A910509F452C06D
-:1007B000813B910509F451C0823B910509F450C079
-:1007C000833B910509F44FC0843B910509F44EC069
-:1007D000853B910509F44DC0863B910509F44CC059
-:1007E000873B910509F44BC0883B910509F44AC049
-:1007F000893B910509F449C08A3B910509F048C03D
-:100800002AE236E447C09C01306544C020E030E075
-:1008100041C021E030E03EC021E830E43BC022E8A6
-:1008200030E438C022EE34E435C029EE34E432C07E
-:100830002AEE34E42FC025EB34E42CC026EB34E45C
-:1008400029C027EB34E426C02CEC34E423C02DEC83
-:1008500034E420C023E835E41DC02AE835E41AC09A
-:1008600022E935E417C024E935E414C021E236E476
-:1008700011C023E236E40EC024E236E40BC025E2C8
-:1008800036E408C026E236E405C027E236E402C0BA
-:1008900020E034E4C90108959CE0799FF00111241F
-:1008A0009CE3899FE00DF11D1124E60FF11DEE0F71
-:1008B000FF1FE25DFE4F25913491C9010895880F15
-:1008C000991F82559040FC0125913491C9010895EA
-:1008D000880F991F825D9E4FFC0125913491C901BB
-:1008E00008950E944C049C019A9581159F4110F433
-:1008F000C9010895C90190528115904128F4C90198
-:100900009F700E9468040895C90190538115904119
-:1009100020F4C9019927906C0895C901905440971B
-:1009200028F4C9018F709927946D0895203180E4CF
-:10093000380719F480E091ED0895213190E43907EA
-:1009400019F480E090ED0895223140E4340719F461
-:1009500080E092ED0895233180E4380719F480E0B7
-:1009600093ED0895211590E5390799F40E945623D7
-:1009700040E065E088E491E00E94600F2FEF44E3DF
-:100980008CE0215040408040E1F700C000000C9412
-:10099000FE29213090E5390731F48091F002816021
-:1009A0008093F0020895C90190558115904108F097
-:1009B00062C0432F55274F70552741305105F9F438
-:1009C000C90174E0880F991F7A95E1F78827937021
-:1009D000B901E3E0660F771FEA95E1F760767727C4
-:1009E000862B972B9C682370332702C0440F551F1A
-:1009F0002A95E2F74F715527842B952B08954230A5
-:100A0000510529F4922F8827816F906A0895433009
-:100A10005105B9F4C90153E0880F991F5A95E1F7C0
-:100A2000807E97702370332741E050E002C0440F6E
-:100A3000551F2A95E2F74F715527842B952B9C68FB
-:100A400008954430510589F5C90143E0880F991F85
-:100A50004A95E1F7807E97702370332741E050E09C
-:100A600002C0440F551F2A95E2F74F715527842B7A
-:100A7000952B9A680895C90190568115904118F4F4
-:100A8000C901906F0895C90190578115904120F4D4
-:100A9000C9019F7090620895C901905881159041D5
-:100AA00020F4C9019F70906A0895203E3105E0F45A
-:100AB000203C310568F52133310509F475C048F44F
-:100AC0002932310509F46BC02A32310509F07BC0A7
-:100AD00075C02933310501F122383105E9F025339C
-:100AE000310509F070C051C0233E3105B1F140F429
-:100AF000203E3105D1F0223E310509F064C01CC012
-:100B0000263E310579F1273E310509F05CC038C039
-:100B1000C9010E945F0408958091010380FD02C015
-:100B200081FF51C080EE90E04FC08091010380FFB3
-:100B3000F9CF89E390E048C08091010382FF0AC0A9
-:100B40008091010384FF03C080E090E03DC083EE0C
-:100B500090E03AC082EE90E037C08091010382FFBE
-:100B6000EFCFF8CF8091010383FF07C0809101038D
-:100B700084FDEACF87EE90E027C086EE90E024C0A7
-:100B80008091010383FFF2CFF8CF8091010385FFAD
-:100B900003C089E290E018C085E390E015C0809121
-:100BA000010385FDF9CFF5CF8091010386FF03C0D6
-:100BB0008AE290E009C081E390E006C080910103E1
-:100BC00086FDF9CFF5CFC9010E94880308950895E5
-:100BD0005F926F927F928F929F92AF92BF92CF92CD
-:100BE000DF92EF92FF920F931F93CF93DF93CDB7D6
-:100BF000DEB72A970FB6F894DEBF0FBECDBF9E01B9
-:100C00002F5F3F4F4E018BE0880E911C60E070E03B
-:100C100000E010E0E12CF12CC12CD12CA12CB12C46
-:100C20008AE0782E622E532E41E050E0E3E9F1E0B5
-:100C3000A62DB52D872D01900D928A95E1F7F9012A
-:100C4000819191919F01FC01E07FFF27E032F10546
-:100C500059F48F709927FA0102C0EE0FFF1F8A9591
-:100C6000E2F7AE2ABF2A37C0E033F10559F48F709E
-:100C70009927FA0102C0EE0FFF1F8A95E2F7CE2AEC
-:100C8000DF2A29C0E034F10559F48F709927FA0161
-:100C900002C0EE0FFF1F8A95E2F7EE2AFF2A1BC063
-:100CA000E035F10559F48F709927FA0102C0EE0F73
-:100CB000FF1F8A95E2F70E2B1F2B0DC0E036F105C2
-:100CC00051F48F709927FA0102C0EE0FFF1F8A9529
-:100CD000E2F76E2B7F2B2815390509F0A7CF94B1C9
-:100CE0008A2D8095892384B985B18A2985B997B1E0
-:100CF0008C2D8095892387B988B18C2988B99AB1C0
-:100D00008E2D809589238AB98BB18E298BB99DB19F
-:100D1000802F809589238DB98EB1802B8EB990B3A9
-:100D2000862F8095892380BB81B3862B81BB2A9631
-:100D30000FB6F894DEBF0FBECDBFDF91CF911F91EC
-:100D40000F91FF90EF90DF90CF90BF90AF909F906A
-:100D50008F907F906F905F9008955F926F927F92D7
-:100D60008F929F92AF92BF92CF92DF92EF92FF92BB
-:100D70000F931F93CF93DF93CDB7DEB768970FB66E
-:100D8000F894DEBF0FBECDBF85B7806885BF85B73D
-:100D9000806885BF0E94E8059E012F5F3F4F4E018E
-:100DA00089E1880E911C60E070E000E010E0E12C29
-:100DB000F12CC12CD12CA12CB12C98E1792E622ED2
-:100DC000532E41E050E0EDE9F1E0A62DB52D872D41
-:100DD00001900D928A95E1F7F901819191919F011E
-:100DE000FC01E07FFF27E032F10559F48F7099276D
-:100DF000FA0102C0EE0FFF1F8A95E2F7AE2ABF2A62
-:100E000037C0E033F10559F48F709927FA0102C019
-:100E1000EE0FFF1F8A95E2F7CE2ADF2A29C0E034C1
-:100E2000F10559F48F709927FA0102C0EE0FFF1FE8
-:100E30008A95E2F7EE2AFF2A1BC0E035F10559F446
-:100E40008F709927FA0102C0EE0FFF1F8A95E2F713
-:100E50000E2B1F2B0DC0E036F10551F48F70992732
-:100E6000FA0102C0EE0FFF1F8A95E2F76E2B7F2B6F
-:100E70002815390509F0A7CF94B18A2D80958923CB
-:100E800084B985B18A2985B997B18C2D809589233C
-:100E900087B988B18C2988B99AB18E2D809589231C
-:100EA0008AB98BB18E298BB99DB1802F809589230A
-:100EB0008DB98EB1802B8EB990B3862F8095892302
-:100EC00080BB81B3862B81BB10922902109228022D
-:100ED000109233021092320210922B0210922A02C8
-:100EE000109235021092340210922D0210922C02B0
-:100EF000109237021092360210922F0210922E0298
-:100F0000109239021092380210923102109230027F
-:100F100010923B0210923A0287E393E0892BB9F0DA
-:100F200068960FB6F894DEBF0FBECDBFDF91CF91AC
-:100F30001F910F91FF90EF90DF90CF90BF90AF90F7
-:100F40009F908F907F906F905F900C94370368967E
-:100F50000FB6F894DEBF0FBECDBFDF91CF911F91CA
-:100F60000F91FF90EF90DF90CF90BF90AF909F9048
-:100F70008F907F906F905F9008955F926F927F92B5
-:100F80008F929F92AF92BF92CF92DF92EF92FF9299
-:100F90000F931F93CF93DF93CDB7DEB7A2970FB612
-:100FA000F894DEBF0FBECDBF7E0149E1E40EF11C17
-:100FB00022E3C22E22E0D22E5E0153E2A50EB11C26
-:100FC0003AE0532E470101E010E048E1642E55E07D
-:100FD000752EE3E9F1E0D401852D01900D928A95FB
-:100FE000E1F7F701819191917F019C01207F3327E7
-:100FF0002032310589F424B18F709927A80102C0ED
-:10100000440F551F8A95E2F7CA01242B24B995B1E4
-:101010008095892385B94FC02033310589F427B1E4
-:101020008F709927F80102C0EE0FFF1F8A95E2F733
-:10103000CF012E2B27B998B18095892388B93BC061
-:101040002034310589F42AB18F709927A80102C094
-:10105000440F551F8A95E2F7CA01242B2AB99BB188
-:10106000809589238BB927C02035310589F42DB1AE
-:101070008F709927F80102C0EE0FFF1F8A95E2F7E3
-:10108000CF012E2B2DB99EB1809589238EB913C027
-:101090002036310581F420B38F709927A80102C052
-:1010A000440F551F8A95E2F7CA01242B20BB91B348
-:1010B0008095892381BB50EA5A95F1F7BE016F5F95
-:1010C0007F4F80E090E020E030E0EDE9F1E0DE01EC
-:1010D0001196462D01900D924A95E1F7FB01419141
-:1010E0005191BF01FA01E07FFF27E032F10511F4D1
-:1010F000E3B113C0E033F10511F4E6B10EC0E03402
-:10110000F10511F4E9B109C0E035F10511F4ECB1D4
-:1011100004C0E036F105B9F4EFB1F0E04F705527A7
-:1011200002C0F595E7954A95E2F7E0FD08C0A801F1
-:10113000022E02C0440F551F0A94E2F702C040E09D
-:1011400050E0842B952B2F5F3F4F2C30310509F059
-:10115000BCCFF601208131812817390721F0918316
-:101160008083709270010E94E805F2E0CF0ED11CDE
-:10117000EA14FB0409F02DCF809170018823A1F1BE
-:10118000815080937001882339F08FE99FE00197A7
-:10119000F1F700C0000028C0809132029091330224
-:1011A0009093290280932802809134029091350215
-:1011B00090932B0280932A028091360290913702FD
-:1011C00090932D0280932C028091380290913902E5
-:1011D00090932F0280932E0280913A0290913B02CD
-:1011E000909331028093300282E493E0892B11F0D6
-:1011F0000E94420381E0A2960FB6F894DEBF0FBEB4
-:10120000CDBFDF91CF911F910F91FF90EF90DF90B5
-:10121000CF90BF90AF909F908F907F906F905F9096
-:101220000895E82FF0E0EE0FFF1FE85DFD4F80818D
-:10123000918108950895CF92DF92EF92FF920F93DC
-:101240001F93CF93DF93CDB7DEB7CC5BD2400FB601
-:10125000F894DEBF0FBECDBF8C01862F642F88238C
-:1012600079F0F80192812FE7482F992329F083E044
-:1012700093E00E94C41904C083E093E00E94D41953
-:10128000F80180818B3091F59181943009F0A8C2EA
-:101290009281809173019923B1F08F5F80937301E4
-:1012A00096E4E5EBF1E0DE01A958BD4F01900D9207
-:1012B0009A95E1F7E0917101F0917201EE0FFF1F35
-:1012C00027E732E036C096E4E5EBF1E0DE01AF5C03
-:1012D000BD4F01900D929A95E1F7E0917101F09167
-:1012E0007201EE0FFF1F21E332E093C08A3009F054
-:1012F000CBC0F8019181943009F072C29281809143
-:101300007301992309F473C081508093730196E4AB
-:10131000E5EBF1E0DE01A551BE4F01900D929A95EB
-:10132000E1F7E0917101F0917201EE0FFF1F2BEEDA
-:1013300031E02C0F3D1FE20FF31F60817181680FB8
-:10134000711D882777FD8095982F0E94AC3120E091
-:1013500030E040E451E40E94113120E030E040E808
-:1013600050E40E94A9309B01AC0160E070E080E095
-:1013700090E40E94C33221E230ED42E053E40E9447
-:1013800060324CE050E00E94BB0F20E04BE760E091
-:1013900083E093E00E94B41920E04BE761E083E032
-:1013A00093E00E94B41920E04BE762E083E093E011
-:1013B0000E94B41920E04BE763E083E093E00E94D1
-:1013C000B41920E04BE764E083E093E0C454DD4FC0
-:1013D0000FB6F894DEBF0FBECDBFDF91CF911F9146
-:1013E0000F91FF90EF90DF90CF900C94B41996E49A
-:1013F000E5EBF1E0DE01AB55BE4F01900D929A9501
-:10140000E1F7E0917101F0917201EE0FFF1F25EA03
-:1014100031E02C0F3D1FE20FF31F60817181680FD7
-:10142000711D882777FD8095982F0E94AC3120E0B0
-:1014300030E040E451E40E94113120E030E040E827
-:1014400050E40E94A9309B01AC0160E070E080E0B4
-:1014500090E40E94C33221E230ED42E053E40E9466
-:1014600060320E94EB0CC454DD4F0FB6F894DEBF1F
-:101470000FBECDBFDF91CF911F910F91FF90EF90E5
-:10148000DF90CF900C94BE0C893009F0D3C0F801E6
-:101490009181943009F0A4C19281992309F4A0C1EB
-:1014A00080917101909172010196909372018093E5
-:1014B000710120E04BE760E083E093E00E94B41903
-:1014C00020E04BE761E083E093E00E94B41920E064
-:1014D0004BE762E083E093E00E94B41920E04BE721
-:1014E00063E083E093E00E94B41920E04BE764E0FE
-:1014F00083E093E00E94B4190E94BE0C00E010E06B
-:10150000E6E4FE2E80917301E5EBF1E0DE01A15AE5
-:10151000BE4F9F2D01900D929A95E1F7E0917101D8
-:10152000F0917201E00FF11FEE0FFF1F2FE531E088
-:101530002C0F3D1FE20FF31F60817181680F711D39
-:10154000882777FD8095982F0E94AC3120E030E00D
-:1015500040E451E40E94113120E030E040E850E4E2
-:101560000E94A9309B01AC0160E070E080E090E453
-:101570000E94C33221E230ED42E053E40E94603227
-:101580004CE050E00E94BB0F3FEF87EE93E03150FC
-:1015900080409040E1F700C0000080917301E5EBCE
-:1015A000F1E0DE01A75EBE4F9F2D01900D929A954E
-:1015B000E1F7E0917101F0917201E00FF11FEE0F80
-:1015C000FF1F29E131E02C0F3D1FE20FF31F608167
-:1015D0007181680F711D882777FD8095982F0E9473
-:1015E000AC3120E030E040E451E40E94113120E0D1
-:1015F00030E040E850E40E94A9309B01AC0160E07B
-:1016000070E080E090E40E94C33221E230ED42E0DD
-:1016100053E40E9460320E94EB0C8FEF9CE701972D
-:10162000F1F700C000000F5F1F4F0830110509F0EF
-:1016300069CF94C1883009F0D3C0F801918194300A
-:1016400009F0CEC09281992309F4CAC0809171013A
-:10165000909172010197909372018093710120E043
-:101660004BE760E083E093E00E94B41920E04BE791
-:1016700061E083E093E00E94B41920E04BE762E070
-:1016800083E093E00E94B41920E04BE763E083E03D
-:1016900093E00E94B41920E04BE764E083E093E01C
-:1016A0000E94B4190E94BE0C00E010E056E4F52E32
-:1016B00080917301E5EBF1E0DE01AD52BF4F9F2D4C
-:1016C00001900D929A95E1F7E0917101F09172010C
-:1016D000E00FF11FEE0FFF1F23ED30E02C0F3D1F39
-:1016E000E20FF31F60817181680F711D882777FDFC
-:1016F0008095982F0E94AC3120E030E040E451E426
-:101700000E94113120E030E040E850E40E94A9300E
-:101710009B01AC0160E070E080E090E40E94C33285
-:1017200021E230ED42E053E40E9460324CE050E0B0
-:101730000E94BB0F3FEF87EE93E031508040904016
-:10174000E1F700C0000080917301E5EBF1E0DE01FC
-:10175000A357BF4F9F2D01900D929A95E1F7E0910D
-:101760007101F0917201E00FF11FEE0FFF1F2DE8E4
-:1017700030E02C0F3D1FE20FF31F60817181680F75
-:10178000711D882777FD8095982F0E94AC3120E04D
-:1017900030E040E451E40E94113120E030E040E8C4
-:1017A00050E40E94A9309B01AC0160E070E080E051
-:1017B00090E40E94C33221E230ED42E053E40E9403
-:1017C00060320E94EB0C8FEF9CE70197F1F700C0AD
-:1017D00000000F5F1F4F0830110509F069CFBEC030
-:1017E000F801228190917301222309F45DC026E45F
-:1017F000E5EBF1E0DE01A95BBF4F01900D922A9568
-:10180000E1F7E0917101F0917201E80FF11DEE0F27
-:10181000FF1F27E430E02C0F3D1FE20FF31F608114
-:101820007181690F711D882777FD8095982F0E941F
-:10183000AC3120E030E040E451E40E9411316B0112
-:101840007C01F801818165E070E0681B71098827DF
-:1018500077FD8095982F0E94AC319B01AC01C701A8
-:10186000B6010E94A9309B01AC0160E070E080E00D
-:1018700090E40E94C33221E230ED42E053E40E9442
-:1018800060324FE050E0C454DD4F0FB6F894DEBF35
-:101890000FBECDBFDF91CF911F910F91FF90EF90C1
-:1018A000DF90CF900C94BB0F26E4E5EBF1E0DE0176
-:1018B000119601900D922A95E1F7E0917101F09156
-:1018C0007201E80FF11DEE0FFF1F21E030E02C0F39
-:1018D0003D1FE20FF31F60817181690F711D882721
-:1018E00077FD8095982F0E94AC3120E030E040E4F5
-:1018F00051E40E9411316B017C01F801818165E0A6
-:1019000070E0681B7109882777FD8095982F0E94E9
-:10191000AC319B01AC01C701B6010E94A9309B010B
-:10192000AC0160E070E080E090E40E94C33221E20C
-:1019300030ED42E053E40E946032C454DD4F0FB6F4
-:10194000F894DEBF0FBECDBFDF91CF911F910F91F5
-:10195000FF90EF90DF90CF900C94EB0CC454DD4FD0
-:101960000FB6F894DEBF0FBECDBFDF91CF911F91B0
-:101970000F91FF90EF90DF90CF9008951092870223
-:1019800010928602809171008D7F8093710080910A
-:1019900090008F7780939000109248021092470237
-:1019A00010928002109281021092820210928302A1
-:1019B00010927F0210927E02EEE5F2E0AEE4B2E019
-:1019C00011921192119211921D921D9282E0EE37A6
-:1019D000F807B1F708956F927F928F929F92AF921E
-:1019E000BF92CF92DF92EF92FF920F931F93CF930C
-:1019F000DF936B017C010EE712E04CE5A42E42E080
-:101A0000B42EC7E0D0E0A7019601F801929182912F
-:101A1000729162918F010E940D31882349F02197C4
-:101A2000F2E0AF1AB108CF3F8FEFD80761F734C0AB
-:101A3000F8011082118212821382F5011182108244
-:101A4000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01FA
-:101A5000AA0FBB1FA25BBD4FCE011AC001964481E5
-:101A600055816681778140835183628373831482B9
-:101A700015821682178212962D913C91139711961A
-:101A80003C932E9313961C921E92129734961296A4
-:101A90008730910519F7C3CF809186029091870214
-:101AA000019797FD05C0909387028093860204C03A
-:101AB0001092870210928602E0918602F0918702CE
-:101AC0003097C9F4809171008D7F8093710080916F
-:101AD00090008F7780939000109280021092810284
-:101AE000109282021092830210927F0210927E0264
-:101AF0001092470285C03197DF01AA0FBB1FAA0FC2
-:101B0000BB1FA25ABD4FCD90DD90ED90FC90EE0F23
-:101B1000FF1FE25BFD4FC081D18160908002709019
-:101B200081028090820290908302A7019601662D27
-:101B3000772D882D992D0E940D3187FF25C0262DE8
-:101B4000372D482D592DC701B6010E94A83020E03D
-:101B500030E04AEF54E40E9411315B018C012A2DE0
-:101B60003B2D402F512F662D772D882D992D0E94CA
-:101B7000A9303B014C01A7019601772D992D0E94B8
-:101B80000D31181664F72EC0A7019601662D772D2A
-:101B9000882D992D0E945C32181634F5A701960104
-:101BA000662D772D882D992D0E94A83020E030E0F9
-:101BB0004AEF54E40E9411315B018C012A2D3B2D28
-:101BC000402F512F662D772D882D992D0E94A830FA
-:101BD0003B014C01A7019601772D992D0E945C32A3
-:101BE00087FFECCF10924D02C0928002D09281020A
-:101BF000E0928202F0928302D0937F02C0937E0231
-:101C0000DF91CF911F910F91FF90EF90DF90CF90D8
-:101C1000BF90AF909F908F907F906F9008953E9A65
|